数据库优化技术的分析与探讨

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:nsnsd_
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:从范式优化、索引优化、及查询优化探讨数据库优化设计的方法。在逻辑设计阶段,根据范式优化的要求设计数据库逻辑结构,权衡利弊选出折衷的方案;在数据库物理设计阶段,根据索引优化中的要求在有关属性或属性的组合上建立索引,以优化数据库物理结构;在数据库查询阶段,优化数据查询语句,提高SQL语句的执行效率。
  关键词: 数据库;范式优化;索引;查询优化
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)12-2755-02
  随着数据库技术的发展,人们越来越依赖于计算机化的业务数据。但由于传统的基于文件的数据存储和检索方法不灵活且难于管理,因而数据库优化设计成为人们关注的题。如何有效地组织和处理大型数据库的海量数据,使得人们能方便、准确、快捷地完成数据的存取操作,成为对数据库的建设及使用需要解决的问题。
  数据库的数据存取主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是DBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。
  所以,数据库的开发过程中,程序员能够在数据库设计阶段,能够根据数据库实际使用需要,采用适当的范式优化对基本表进行合理的设计和调整,同时在数据库应用程序开发时,注重提高查询语句的执行效率,将会在很大程度提高数据库性能。
  1 数据库范式优化
  在数据库开发过程中,需要利用范式对基本表进行规范化。一般情况下,基本表的设计要求达到第三范式,第三范式的特征是在消除函数依赖的基础上消除传递依赖,从而使非主键的其他属性只依赖于主键属性。第三范式的使用消除了由于数据冗余带来的插入、更新和删除操作产生的不可预期的副作用,同时保证了良好的的参照完整限制和实体完整性限制,使得数据容易维护。
  将规范化作为数据库开发过程的完善工具时,首先利用E-R图建立概念数据模型,并使用转换规则生成基本表,然后利用范式分析各个表,最终保证基本表及其字段之间的关系满足第三范式。基于第三范式设计的数据库表虽然有其优越性,但是,满足第三范式的数据库设计,往往不一定是最好的设计。
  作为一项设计标准,第三范式“消除冗余以避免更改异常”偏重于数据库的更改功能。在数据库设计中,当分解表来符合范式要求时,表的数量会增加,虽然数据库越容易更改,但查询的难度会随之增加。如果数据库在实际应用中主要用于查询,那么过多追求避免更改异常不见得是一个恰到好处的设计目标。
  另外,加入更多的表容易导致过程从多表获取数据时引发大量的连接操作,占用额外的磁盘I/O操作和处理逻辑,因此减慢了系统速度。所以,在许多过程要频繁访问一个表、子集数据访问、重复计算和冗余数据的情况下,需要对基本表进行结构优化和性能调整。
  1.1 利用分割表减小数据量
  当一个表包含过大数据量,而主要过程反复访问一个表中的部分行或者部分列而不需要访问整个表时,可以水平分割表或者垂直分割表,可以将被频繁访问的列数据单独存为一个子集表。这些操作都是在不用考虑磁盘的开销的情况下,同时分割表也增加了维护数据完整性的代价。
  1.2 存储衍生数据
  对一些要做大量重复性计算的过程而言,可以考虑增加相应列存储计算结果。如在库存表中每个仓库的库存总量由产品数量相加所得,而库存总量又频繁被查询,则有必要将库存总量作为一个单独列加入到表中。
  1.3 增加相关属性字段
  规范化规则要求独立存储外键,以表示1:M关联。如果外键表示代码,而用户需要同时得到代码以及相应的名称,则可以将相应列和代码存储在一起,减少一些连接操作。用户如订单报表的输出需要订单号、产品名、订单金额等字段,而订单号和产品名在不同表中,查询时需要对这两个表进行连接查询,为了提高查询速度,可以在订单表中增加产品名字段。
  1.4 增加派生列
  储存派生数据可以减少表的连接操作,省去检索数据以计算派生数据的麻烦。如订单总量频繁要求被输出,而计算订单总量的两个数据订单数量和产品单价分别在订单表和产品表中,那么可以增加订单总量字段到订单总量表中,从而避免了两次连接操作。
  虽然范式的级别越高,关系模式越不会出现冗余和更新异常等不合理情况,但是关系模式的数目在不断的分解过程中将会不可避免的逐渐增加,必然会导致连接操作的增多,而连接操作是一个开销非常大的运算,过多的关系连接必然加重数据库系统的负担,影响系统效率,所以说模式的分解切不可一味追求其规范化程度而忽略了实际的使用方便性,在应用当中我们需要结合实际情况酌情考虑,尽可能使二者达到一个比较均衡的状态。
  2 数据库查询优化
  查询是数据库系统中使用最频繁、最基本的操作。对于一个给定的查询,通常会有许多种可能的执行策略,查询优化就是从众多策略中找出高效执行策略的处理过程,是DBMS实现的关键技术,对系统性能有很大影响。一些大规模的系统,数据量非常大,全表扫描无疑耗费大量时间,查询操作所基于的SELECT语句在SQL语句中是代价最大的语句,由程序员提交的SQL语句是系统优化的基础,如果能够采用比全表扫描更好的查询策略,则可以使查询时间大大降低,提高查询效率。
  2.1 合理使用索引
  合理的使用索引可以加快数据检索速度,从而大大提高查询效率,其使用原则如下:
  1)在经常进行搜索的列上、主键列上以及经常进行连接但是没有指定为外键的列上建立索引。
  2)在频繁进行排序或分组(即进行group by或order by操作)的列上,以及经常需要根据范围进行搜索的列上建立索引。
  3)对于那些只有很少数据值的列不应该建立索引,如性别列。取值很少的列结果集的数据行占了表中数据行的很大比例,建立索引并不能提高查询效率。
  4)对于数据类型为text、image等这类数据量大取值通常很少的数据不必要建立索引。
  5)经常执行大量插入和删除的表不应当包含很多索引。
  6)避免在组合列上使用索引,大多数优化组件可在同一个表上使用多个索引,相比之下组合列上的索引不够灵活。
  2.2 避免放弃使用索引的语句操作
  1)SQL当中尽量不采用性能比较低的IN操作符,强烈避免使用NOT IN操作符。相应的语句操作符可以由EXISTS 或NOT EXISTS代替。
  2)IS NULL 或IS NOT NULL操作会导致全盘扫描而放弃使用索引,如果并非严格要求为NULL值,在使用时应修改为和某一个缺省值进行比较。如:
  a is not null 改为 a>0 或a>’’(空值)
  3)UNION操作符在进行表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果,在没有重复的记录的情况下可以使用只是简单的将两个结果合并后就返回的UNION ALL代替。
  4)避免使用SELECT * 语句,尽量明确查询字段,不要返回用不到的任何字段。
  5)尽量避免在可以使用索引的列上使用函数,函数将排除使用索引的可能性。
  6)如果列上的数据类型与相关常量值不匹配,将发生隐式转换,如year=‘2011’条件将导致year列隐性转化为字符数据类型,从而使year列不能使用索引。
  2.3 WHERE后面的条件顺序影响
  WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如
  语句一:SELECTSname
  FROM Shop,SC
  WHERE Item=’彩电’ ANDShop.S# = SC.S#
  语句二:SELECTSname
  FROM Shop,SC
  WHEREShop.S# = SC.S#ANDItem=’彩电’
  语句一先连接后做选择,执行时间需要152.5秒,而语句二先选择后做连接,执行时间需要7.5秒,所以在可以的情况下,先做选择后做连接,而不是先做连接后做选择。
  同样,可以最大程度过滤掉大数量记录的条件要写在where句子的末尾。如需要查询库存量大于1000的饮料产品,在实际数据中库存量大于1000的产品占到80%,而饮料产品占到产品总量的5%,所以应将饮料产品这一条件放在where句子的末尾。
  2.4 FROM后面查询表顺序的影响
  在FROM后面列表的顺序会对SQL语句的执行性能产生影响,FROM最后面的表将会最先被处理,在有多个查询表的情况下,应该选择记录条数最少的表作为基础表。如果有3个以上的表需要连接查询,则选择交叉表作为基础表,以避免由于表的顺序不对而产生的十分耗服务器资源的数据交叉。
  3结束语
  由此可见,在设计数据库时,最初的概念模型设计阶段要遵守第三范式,在具体数据库物理设计阶段要根据数据库使用实际情况,适当降低范式要求,增加冗余,在数据库工作效率和空间开销上寻求最佳方案。而对于数据库查询语句的优化,要了解数据库的特征,根据数据的实际情况构造相应的SQL语句,重视不同语句的使用、使用顺序以及书写方式对执行效率的影响。通过深入了解数据库特征,采用合适的数据库物理设计方案,同时在应用程序开发时采取最佳的查询语句,从而使数据库在使用过程中性能大大提高。
  参考文献:
  [1] 沈钧毅.数据库系统教程[M].北京:科学出版社,2006.
  [2] 黎孟雄.数据库优化技术的研究与实现[J].连云港师范高等专科学校学报,2004(3):86-88.
  [3] 吴碌莉,刘仁辉,何冬黎.数据库优化设计方法初探[J].广西科学院学报,2005,21(2):118-121.
其他文献
摘要:目前,对于面向对象开发方法的研究已日益成熟。其中,对象建模技术(OMT)在面向对象的软件系统建模中具有较好的性能。介绍了OMT概念以及OMT的三种模型,阐述了OMT 的建模和设计过程,充分体现了OMT技术为大多数应用领域的软件开发提供了一种更实际、更高效的保证。  关键词:OMT;建模;设计  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)33-8042-0
从数字迎新的概念诞生与第一套迎新系统投入应用至今已十年有余,高校数字迎新系统建设已经发展成为数字化校园建设中的重要组成部分,在系统功能、设计模式和技术运用上均有不
目的观察后循环脑梗死患者血清糖化血红蛋白(HbA_(1c))水平与血管狭窄严重程度、病情进展及预后的相关性。方法选择119例后循环脑梗死患者,根据入院时的血清HbA_(1c)水平分为A组(〈6
腺苷酸活化蛋白激酶(AMPK)是一种广泛存在于真核细胞中的丝氨酸/苏氨酸激酶,在维持细胞能量代谢平衡中发挥重要作用。AMPK激活时,一方面可增强机体分解代谢,使脂肪酸β氧化增