数据库结构的优化方法

摘要: 对数据库的优化一直是很多大型网站运营过程中必须应对的重要问题。比如,在2012 年3 月底本人有参与开发了一个A省的省级的政务信息公开发布系统,经过了4个月的功能开发和测试之

对数据库的优化一直是很多大型网站运营过程中必须应对的重要问题。比如,在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年、2014年…2021年。那么,如果你想查询哪个年份的记录,就可以去相对应的表里进行检索,由于每个表中的记录数,会比一个大表记录数少了很多,其查询效率也会得到明显的提高。

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

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

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

时间: 2024-09-16 15:13:41

数据库结构的优化方法的相关文章

千万级的mysql数据库与sql优化方法

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使

多条件数据库查询的优化方法

在数据库编程中,管理人员需要经常从数据库中查询数据.当查询条件为确定时,我们可以明确用的SQL语句来实现,但是当查询条件为多个条件的动态组合时,查询语句会由于分支太多及IF语句的多重嵌套而变得相当复杂.在此,笔者提供了一种优化方法,运用本方法可以有效地减少查询语句的分支和数量以及IF条件语句的嵌套层数,从而提高程序的运行效率. 下面我们以一个简单的例子来说明,假设有一个名为employee的表,现在我们要从其中查询数据,条件有三个,由用户动态选择,如图1所示: 其中条件A.B.C之间是与的关系,

WordPress数据库的清理优化方法

第一步:备份数据库 第二步:运行下面sql  代码如下 复制代码 DELETE FROM wp_posts WHERE post_type ='revision'; 但是对于于post_type,wp_post内除了文章之外,还有link.page等内容,如果一并删除,等于将未保存的链接或者草稿状态的页面等都一块删除了.有可能照成不必要的损失,所以用下面的命令删除是比较安全的.  代码如下 复制代码 delete FROM wp_posts WHERE post_type='post' &&

SQL Server数据库性能的优化

server|数据|数据库|性能|优化 编者按:数据库性能优化和数据库管理系统密切相关,不同的数据库管理系统在具体操作上有很大不同.继本报连续在2003年第48期.49期上刊登<Sybase数据库性能调优>和<Oracle服务器性能调整攻略>,分别讨论了Sybase和Oracle数据库管理系统以后,本期我们将具体介绍SQL Server数据库的性能优化方法. 数据库是企业信息的核心,其应用水平的高低直接影响到企业管理水平.选择了一个高性能的数据库产品不等于就有一个好的数据库应用系统

详解MySQL 数据库优化方法

用analyze进行处理,定期进行处理 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]... 对表进行定义分析analyze table table_name CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED} 定期对表进行优化 OPTIMIZE [LOCAL | NO_W

asp.net性能优化之程序与数据库优化方法

一, SqlDataRead和Dataset的选择 Sqldataread优点:读取数据非常快.如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多.缺点:直到数据读完才可close掉于数据库教程的连接 (SqlDataReader 读数据是快速向前的.SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法.它使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据.DataRead

mysql数据库的sql语句常用优化方法

mysql数据库的sql语句常用优化方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where

Oracle数据库的性能调整与优化方法探析

1 引言 Oracle数据库作为一种具有高可靠性.高安全性.高兼容性的大型关系型数据库,在金融.通信.医 疗.生产制造等行业得到了广泛的应用,已逐渐成为企业信息化建设的重要基础平台.在航天领域中, Oracle数据库应用在人力资源.型号物资.财务及研制过程管理等管理信息系统的同时,还用来存储和管 理大量星上数据.要使Oracle数据库适应应用需求,有效管理和利用信息时代不断产生并急剧膨胀的数据 ,从而更好地支撑业务应用,对Oracle数据库优化显得尤为重要. 在实际应用中,常常会遇到Oracle

数据分析 大数据-数据库大数据的优化方法

问题描述 数据库大数据的优化方法 数据库的数据库达到数百亿上千亿的时候,查询数据库中数据会发生长时间卡顿,怎么才能优化?使大数据查询流畅??? 解决方案 那么大数量级的没做过,不过根据查询条件设置分区表是个不错的选择 解决方案二: 大数据量高并发访问的数据库优化方法大数据量高并发访问的数据库优化方法大数据量高并发的数据库优化 解决方案三: 如果没有分布式的条件,那可以考虑分库,但是分库也带来了查询的复杂性,综合考虑吧,另外就是查询时,按一定条件查询,不要全部查询,建好索引 解决方案四: 数据库