浅谈数据库查询优化策略

来源 :硅谷 | 被引量 : 0次 | 上传用户:milamiya2009
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: 数据库系统是各类应用程序开发的核心,是各行业如银行、企业、政府、机关、企事业单位等众多部门最为重要的应用。而在实际应用中,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,查询操作往往需要花费更多的时间和空间资源。因此数据库查询的效率会直接影响数据库操作,同时也会决定整个系统的效率,由此可见查询优化技术的重要性。
  关键词: 数据库;查询优化
  中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2011)0310177-01
  
  数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心。数据库技术研究和解决了计算机信息处理过程中大量数据有效地组织和存储的问题,在数据库系统中减少数据存储冗余、实现数据共享、保障数据安全以及高效地检索数据和处理数据。
  随着计算机技术与网络通信技术的发展,数据库技术已成为信息社会中对大量数据进行组织与管理的重要技术手段及软件技术,是网络信息化管理系统的基础。而很多数据库应用系统和信息管理系统中,查询功能是必不可少的,也是所占的比例最大的。数据库的查询功能的优化规划,会影响整个系统的效率,由此可见查询优化规划是数据库设计中非常重要的一部分。要想整个数据库的查询得到很大程度的优化,就必须要从需求、设计到使用都要进行规划和技术改进。下面简单介绍一下数据库查询优化的策略。
  1 合理使用索引
  索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处。在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引;在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引;在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度;如果待排序的列有多个,可以在这些列上建立复合索引(co
  mpound index)。
  2 避免或简化排序
  应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。索引中不包括一个或几个待排序的列;group by或order by子句中列的次序与索引的次序不一样;排序的列来自不同的表都会影响查询优化。
  为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
  3 消除对大型表行数据的顺序存取
  在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。
  4 避免困难的正规表达式
  LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”。即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。
  5 尽量避免使用游标
  因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
  6 尽量使用表变量来代替临时表。
  如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。避免频繁创建和删除临时表,以减少系统表资源的消耗。临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替create table,避免造成大量 log,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table ,然后drop table,这样可以避免系统表的较长时间锁定。
  7 尽量不要使用or
  使用or会引起全表扫描,将大大降低查询效率。字段提取要按照“需多少、提多少”的原则,避免“select *”,尽量使用“select 字段1,字段2,字段3……”。实践证明:每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。
  总之,对于数据库应用程序,数据库设计尤为重要,而数据库查询优化更是应用程序效率的一个检验,因此设计者必须根据实际情况,参考数据库优化策略,对数据库查询进行优化调整,力求最大限度地提高操作效率,实现数据库的查询优化设计。
  
  参考文献:
  [1]李建中,《数据库原理》,水利电力出版社,2004.
  [2]李有军,《SQL Server数据库应用与开发网络大讲堂》,清华大学出版社,2010.
  [3]姜代红,《数据库原理及应用实用教程》,清华大学出版社,2010.
  
  作者简介:
  吴慧,硕士,北京交通大学,讲师,石家庄信息工程职业学院,研究方向:网站开发及平面设计。
其他文献
介绍了两种将VC++编制的外文软件汉化的思路和方法,应用范围比较广泛,且十分有效.
总结了大测程重力仪分段标定的格值相对变化大于/1400时,单程、三程循环重力观测值居于不同测程段内可能出现的8种计算公式.
采用微机化携带式多元素X荧光仪 ,通过现场进行多元素测量获取多种找矿信息。利用多种X荧光信息间的相互验证、相互补充 ,准确确定找矿靶位 ,提高了找矿成功率。在“金三角”
KJ607矿用分布武光纤温度监测及火灾预警系统利用光纤散射的拉曼效应和光时域分析技术,将光模测温光缆沿煤矿井下的采空区、工作面、高压电缆等空间、设备进行线型敷设,利用
3d studio max常简称为3ds Max或MAX,是Autodesk公司开发的基于PC系统的三维动画渲染和制图软件。在应用范围方面,用于广告、影视、工业设计、建筑设计、多媒体制作、游戏、辅助教学以及工程可视化等领
美国原油生产受到低油价因素的抑制,页岩油热潮出现降温.美国能源署(EIA)中旬公布,5月份北达科他州页岩区等地区的页岩油日产出将减少5.7万桶.这是该机构自2013年起发布月度
期刊
通过胶东某金矿普查区大比例尺高精度磁法测量和重点区段初步工程验证 ,取得如下认识 :①划出了不同岩性空间分布范围 ;②编制了剪切带变形构造系统地质图 ,实测和推测出剪切
摘要: 针对目前火车机车轮缘润滑系统所存在的问题,可以采用气压传动的推动装置来实现干式润滑,以促进火车机车轮缘润滑装置的改良,使得对轮缘的润滑有进一步的改善。① 气压传动的基本原理:由空气压缩机产生一定压力的气体,通过气缸产生一定的力,而使得润滑棒顶紧火车机车轮缘,从而达到润滑效果。② 气压传动的优越性:气压传动装置的设计改善通过蜗卷弹簧来顶紧润滑棒所产生的不足。同时还减少空气压缩机的工作时间。这
全面建设小康社会 ,为高等职业教育提供了巨大的发展机遇。怎样抓住这个机遇自我调整 ,努力适应社会需求 ,是高职院校迫切需要解决的课题。当前 ,应该解决好以下几个方面的问
对纤维素类、淀粉类、丹宁类改性产品的性能作一简单介绍 On the cellulose, starch, tannin modified product performance for a brief introduction