浅谈数据库的结构优化

  对数据库的优化一直是很多大型网站运营过程中必须应对的重要问题。比如,在2012 年3 月底本人有参与开发了一个A省的省级的政务信息公开发布系统,经过了4个月的功能开发和测试之后,该系统正式上线了,由于该系统采用的是地区分站模式,按照“省-市-县-镇-村”的站点模式,由政府主导,该系统在A省的所 有地区很快就开始推广使用,随着每日发布的政务公开信息逐步增加,结果2个月之后,发现系统曾出现过慢查询的问题。按照初步计算,A省共有15000多个 行政村,1200个镇,100个县与9个市,假设每个村、镇、县、市、省每日发布信息各10条,那么每日的信息发布数量将达到 (15000+1200+100+9+1)*10=163100条数据,那么1个月的数据量将达到163100*30=4893000︾5000000, 那么两个月将达到10000000条,一年将达到上亿条的数据量。面对着这么大的数据量,查询效率也会成为系统的一个性能的瓶颈。

  在两个月的时间内,数据库达到千万级的信息条数是一个较大的数据量。特别是在刚开始的1-2个月的过程中,我们还能够在5秒左右的时间范围内对信息进行查询,可是随着信息 量的逐步增加,现在每次的信息汇总和报表都要进行较长的时间等待,最多的达到20多秒。核对了下当初选择的服务器性能配置是没有问题的,那么这个时候我们只有通过优化数据库的结构来提升数据的查询效率了。

  数据库结构的优化有多种方法,主要的有两种,一是利用存储过程来代替常用的SQL查询语句;另一种是使用数据库管理系统中的分区表方法进。使用存储过程的优化方法有执行速度快的优点,但是其本身不利于调试、没有办法使用数据库缓存机制等缺点,所以在系统安全性和性能要求更高的情况下,建议使用分区表的方法。但要注意:并不是只要数据量就够多就需要通过数据库分区表来提高查询效率,而是要在数据是分段的前提下,我们才需要考虑到是否需要使用分区表。很显然,结合上述的例子,政务信息公开发布系统,发布的信息是按时间段进行查询的,所以我们可以进行数据库表分区。

  数据库的表分区有两种方式,水平表分区和垂直表分区。

  水平分区的目的是将一个表分为多个表。每个表包含的列数(表字段)都是相同的,但是记录数(数据行)会减少。比如,我们可以将一个包含1亿行记录的数据库表,按照水平分区的方式,分成12个小表,每个小表分别表示这一年份内从1月到12月的数据。这样,任何需要查询特定月份数据的查询只需查询相应月份的表,而避免从存储在1个大表中的所有月份的数据进行查询。根据SQL语句的执行效率,毫无疑问,从小表中的查询效率会远远高于从大表中查询的效率。垂直分区方式则与水平分区方式相反,从纵向进行分区,是将一个原始表分成多个只包含较少列的表。在日常的应用中,水平分区可以说是最常用的分区方式,所有下面我们以水平分区方式来介绍。

  用最简单话说,数据库分区表就是将一个大表分成许多个小表。这里,我们以政务信息公开表为例,该表记录着所有时间段内发布的政务信息,那么我们就可以进行水平分区,把这个大的信息表按时间分成几个小表,假设这里分成10个小表。2012年、2013年、3721.html">2014年…2021年。那么,如果你想查询哪个年份的记录,就可以去相对应的表里进行检索,由于每个表中的记录数,会比一个大表记录数少了很多,其查询效率也会得到明显的提高。

  但我们还应该注意到,如果按照一个大表分成几个小表的处理方式,会给软件开发人员增加代码编程上的负担和难道。以记录增加或修改为例,以上10个表是独立的10个表,在不同时间进行记录增加或修改操作的时候,编程人员需要使用不同的SQL语句。例如在2012年添加记录时,程序员要将记录添加到2012年那个表里; 在2013年添加记录时,程序员要将记录添加到2013年的那个表里。这样,编程人员的工作量会增加,出现程序错误的可能性也会增加。那么这种情况下我们该如何进行水平分区呢?

  使用分区表就可以很好的解决上面问题。分区表可以从物理上将一个大表分成 几个小表,但是从逻辑上来看,还是一个大表。分区表可以将一个信息记录表分成若干个物理上的小表,但是对于编程人员而言,他们所面对的依然是一个大表,无论是2012年记录添加还是2013年记录添加,对于编程人员而言是不需要考虑的,他只要将记录插入到信息记录表(逻辑意义上的大表)里就行了。

  对应数据库分区表的操作,不同的数据库都有各自创建数据库分区的方法,比如微软的数据库SQL Server就可以实现数据库分区表的操作,通过相关的设置后就可以实现数据库的分区操作。使用SQL Server创建分区表的具体操作步骤可以使用SQL命令,也可以使用数据库本身自带的向导来完整数据库分区操作。

  本文由心理学之家http://www.psybook.com 供稿,转载请标明出处!

时间: 2024-10-31 04:30:12

浅谈数据库的结构优化的相关文章

浅谈网站的结构优化(一)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 我们知道一个外链数的质量和数量会影响网页的PR排名,但这个可以考虑为外在的因素,但事情都是内外因相结合的,那今天我们来一个影响网页收录数和排名的内因-网站的结构规划! 何为网站结构 网络上搜索到的定义是:网站结构是指网站中页面间的层次关系;按性质可分为逻辑结构及物理结构.页面间的层次关系通俗一点说就是网站内部网页之间的一个链接的关系!对网站进

新手站长浅谈网站推广、优化方法实例二

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 前几天发了一篇关于网站推广的文章,今天继续那天的话题 上一篇的地址http://www.admin5.com/article/20080814/98833.shtml([原创]新手站长浅谈网站推广.优化方法实例一) 我是一名新手站长,建立自己的网站(天天电影网www.662112.cn)才几天时间,还谈不上对网站推广有多深刻的方法,不过这几天

A5营销:浅谈企业站长胡乱优化网站所造成的降权或K站的原因

如今,中小型企业网站被降权已经见怪不怪的现象了,几乎每天都可以看到一些企业网站被百度惩罚,当面对这些时会有很多企业站长在埋怨百度,为什么我所优化的企业网站是按照正规手段优化的,却还要把我的企业网站给降权.当然,越是有这样的现象发生越是有人埋怨百度,可以说这是一个很正常的现象.现象大家也应该知道,目前中小型企业都在通过企业网站在互联网上传递信息.产品.服务等,因为企业知道网站可以在互联网上与更多的潜在客户联系,所以企业也把网站看的非常重要.可是很多企业的站长胡乱优化网站,导致网站被降权被K站,这是

浅谈数据库设计技巧(上)

技巧|设计|数据|数据库|数据库设计 说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法.面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,

浅谈企业网站结构化的误区

凝凝飞儿记得在实习的时候,刚开始接手的网站是自己公司的站,也就是维护一下而已,但是发现公司网站标题实在是感觉到鸭梨很大,看到了太多的影响用户体验的操作,可能有时候企业网站就只能针对一下求职者去上面查看信息,但是一份好的企业网站对于网络推广也是具有最强大的影响力的.那么,自己就浅谈下有哪些地方时需要注意的. 一,企业网站标题 关于企业网站标题,还是有很多网站的标题直接就是公司名称,相信这些企业名称才能真真正正代表着自己企业网站的形象,相信每一个seoer和老板提这个的时候,都很有压力,但是标题是公

浅谈数据库设计技巧

说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法.面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装. 数据库的最初雏形据说源

浅谈友情链接seo优化法则

浅谈友情链接seo教程优化法则 一.行业相关性 选择跟自己网站行业相关性网站为最佳.第一.不影响用户体验,比如,你是一个家居站,如果链接一个小说站,给用户的感觉是不是有点风马牛不相及.同理,搜索引擎排名算法同样遵循内容相关.用户体验度. 二.收录数量及快照 1.收录数量越多代表这个网站实力越强,反链越多代表该网站越受欢迎,快照更新速度越快代表该网站权重越高,能与这样的网站交换链接是上上之选,但不排除利用作弊手法做到这一切. 2.检查site和domain首页是否第一,再复制title标签在搜索框

浅谈数据库设计技巧(上)(转)

转一篇他人写的数据库设计技巧,感觉也不一定都正确,开拓一下思路吧. 说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法.面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中

浅谈新站长在优化路上的禁忌

相信每个站长都会有自己的一套优化方案,尤其是新站长学习的都是前辈们的那些优化技术,开始走上了优化之路.可是事物总有一个度的限制.哲学上就有适度原则,超过了这个度势必会带来一些事物的变化.SEO高手可以通过优化让自己的网站有个好的排名,那是因为他们把握好了优化的尺度,很多新站长在了解到优化方法后,就开始了疯狂的优化,最终造成网站被降权或被K的悲剧.那么我们在网站优化的过程中怎样才能防止优化过度呢? 一.禁忌关键词优化过度 关键词是网站的核心,对关键词的优化是当然的.对于关键词很多站长的网站出现关键