数据库优化策略分析
2014-04-16于丽丽哈尔滨飞机工业集团有限责任公司
于丽丽/哈尔滨飞机工业集团有限责任公司
数据库优化策略分析
于丽丽/哈尔滨飞机工业集团有限责任公司
从范式优化、索引优化和查询优化三个方面对数据库的优化设计方法进行分析探讨。在逻辑设计阶段,要按照范式优化的具体要求来设计数据库逻辑结构,比较其优劣从而选择更好的方案;在数据库物理设计阶段,在有关属性或属性的组合上建立索引时要根据索引优化中的具体要求来进行,使数据库物理结构得以优化;在数据库查询阶段,优化数据查询语句,以提高SQL语句的执行效率。
数据库;范式优化;索引优化;查询优化
一、引言
随着数据库应用技术的不断发展,人们对计算机化数据的需求性越来起强。不完善的数据库对人们日常的生活影响越来越大,这样就照成人们对数据库的优化设计日益关注起来。本文针对数据库开发应用中遇到几种问题采取合适的方法进行调整和优化,使其更加适用于们对数据库的应用需求。
二、基于范式(NF)优化数据库
关系模式规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、删除进发生的异常现象。这就要求关系模式要满足一定的条件。我们把关系模式规范化过程中不同程序的规范化要求设立的不同标准称为范式。
需要符合第三范式,其原理是所有的非主属性都不函数传递于主属性。第三范式的运用,不仅避免了由于频繁的数据备份给相关操作带来的不利影响,而且很好的保护了数据库的各方面性能不受到损害,使其能够正常的运行。
运用第三范式设计数据库时,往往力求改变数据库的各方面性能。但是不是分解得越多越好,因为在查询上,时间上要浪费得更多。因此,对于时常要使用的表或者相关数据,要对其结构及性能进行全面优化和调整。
三、基于索引优化数据库
索引应用于数据库的主要目的是为了提高数据查询的效率,而数据库优化查询的重要方法之一是建立索引。建立合适的数据库系统索引,就可以避免全表扫描,并减少由于连接查询而造成的各种多余的开销,有效提高数据库的查询速度,优化了数据库性能。然而在创建索引时也不由地增加了数据库系统的时间和空间的开销。所以在创建索引时应注意与实际的数据库查询需求相结合,这样才能真正实现基于索引的优化数据库。
1.索引基本概念。索引是一个单独的、物理的数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。
2.创建合适并且高效的索引。创建合适的索引即是对所要创建的索引进行有效的逻辑判断,使所创建的索引对数据库的工作效率的提高有所帮助。为了实现创建合适的索引,我们得考虑以下几点要求:在编写SQL程序时,多注释那些常用且对性能有影响的SQL语句,以便后来人能更好的理解并利用它,然后再判断数据库中哪些表中的字段要建立索引;第二,对数据库中使用次数较多的表,数据量较大的表,较经常和其他表进行连接操作的表等,都要进行特别的关注,因为这些表上的索引将对我们所编写的SQL语句的性能产生深远的影响。
四、基于查询优化数据库
查询优化是为了查询选择最有效的查询计划的过程。查询优化一方面在关系代数级进行优化,力图找出与给定表达式等价,但执行效率更高的一个表达式。查询优化的另一方面涉及查询语句处理策略的选择,例如SQL语句的合理编写。
1.关系代数表达式中的查询优化。关系系统的查询优化是关系数据库管理系统实现的关键技术,又是关系系统的优点。因为,用户只要提出“干什么”,不必指出“怎么干”。在关系代数表达式中,需要指出若干个关系的操作步骤。问题是怎样做才能保证省时、省空间以及效率高,这就是查询优化的问题。需要注意的是,在关系代数运算中,笛卡尔积、连接运算最费时间和空间,空间应采用什么样的策略,能够节省时间空间,这就是优化的准则。具体地讲:
(1)提早执行选取运算;
(2)合并乘积与其后的选择运算为连接运算;
(3)将投影运算和其前后的其他运算同时进行,以避免重复扫描关系;
(4)将投影运算和其前后的二目运算结合起来,便得没有必要为去掉某些字段再扫描一遍关系;
(5)在执行连接前对关系做适当的预处理,就能快速地找到要连接的元组。
2.查询优化涉及查询语句(SQL)的处理策略。
(1)应尽可能不在where子句中使用“!=”这种不等于的操作符,因为这样会促使引擎进行全表扫描,优化器将无法通过合理的索引方式来确定将要查询表的行数,这将非常浪费查询的时间和空间。
(2)应尽可能不在where子句中使用“or”操作符,这样也会导致全表扫描而导致效率差;
(3)应尽量避免使用通配符“%”开头的模糊查询。
(4)应尽可能不在where子句中对字段进行表达式运算操作(如加减乘除),这也将导致引擎放弃使用索引而进行全表扫描从而降低了查询效率。
(5)应尽可能不在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描从而降低了查询效率。
(6)查询语句中使用exists是一个比较好的编写习惯。
(7)应尽量避免过于频繁创建和删除临时表,这样可以减少系统表资源的消耗,从而为别的基本表腾出更多的空间来进行存储与运算。
五、结语
数据库访问是影响现代应用程序性能和可伸缩性的一个关键点。虽然框架支持构建数据访问逻辑,仍然需要对数据访问逻辑投入相当的精力,以避免种种陷阱和问题。问题之关键是要理解应用程序数据访问层的动态和特性的一切细节。优化数据库对提高计算机系统的可用性和效率,具有非常重要的意义,特别是在数据库设计研发阶段,对逻辑结构和物理结构进行有效的优化设计,创建一个规则布局合理的数据库,能获得最小的系统开销,能从根本上大大提高应用系统的整体性能,对于以后的数据库性能调整和利用都有非常大的益处。对数据库的优化,关系着我们对数据库的应用是否高效。本文在对数据库优化策略分析的基础上提出了部分见解,有效的提高数据库的应用。
[1]微软公司著.SQLServer 2005数据库开发与实现.高等教育出版社,2007年9月.
[2]陈志泊.数据库原理及应用教程.人民邮电出版社,2008年3月.[3]吴碌莉.数据库优化设计方法初探[J].广西科学院学报,2005年2月.
[4]蒋文沛.SQLServer 2005实用教程。人民邮电出版社,2009年6月.