您的当前位置:首页基于SQL_Server的数据库查询优化分析

基于SQL_Server的数据库查询优化分析

2021-02-06 来源:爱问旅游网
维普资讯 http://www.cqvip.com

2006年第3期 No.3.2006 湖州职业技术学院学报 Jou r hal of Huzhou Vocational and Technological College 2006年9月 Sep.2006 基于SQL Server的数据库 查询优化分析 徐寿芳 ,方东傅。 (1.湖州职业技术学院经贸分院,浙江湖州 313000;2.湖州职业技术学院理工分院,浙江湖州 313000) 摘要:优化数据库的整体性能是数据库技术的另一个研究热点。 以SOL Server为基础,分析了数据库查询优化的常用方 法:索引优化和SOL语句优化,证明可以提高数据库的整体性能。 关键字:索引;SQL;SELECT语句;性能优化 中图分类号:TP392 文献标识码:A 文章编号:1672—2388(2006)03—0086—03 Database’S Query Optimization Based on SQL Server XU Shou—fang,FANG Dong—fu (1.Faculty ofEconomy and Trade.Huzhou Vocational and Technological CoHege,Huzhou 313000,Ctu'nal Faculty ofScience and Engineering。Huzhou Vocational and Technological College,Huzhou 313000,C&hat) Abstract:ovtir ̄the total perfom肌ce of database has become another hot topic in database’s technology.Oil the base of SQL Server,we talk a. bout the method of atdabase’s query optimization:index optimizadon nd aSQL statement optimization,SO as to hnpmve database’s otalt perfom∞c皂 Key words:index structure query language;select statement;performance optimization 现代SQL数据库的性能优化包括系统的硬件性能优化、操作系统性能优化、数据库系统配置优化、 应用程序性能优化。数据库系统配置和应用程序性能优化相互影响,相互作用。本文从软件开发的角 度,侧重数据库系统的查询性能优化,介绍几种可行的查询优化方法。 1 优化数据库结构 在数据库结构设计时,对一些包含数值信息的字段尽量设计为数字型字段,而少用或不用字符型字 段。字符型字段会降低查询和连接的性能,并增加内存开销。原因很简单,字符型数据在处理查询和连 接时要求逐个字符进行比较,而数字型数据只需要比较一次。另外,在条件许可的情况下,增加冗余字段 也是提高查询性能的一个有效手段 在需要多个表连接的查询中,查询的性能较低,如果在适当的位置 增加冗余字段,相应地需要连接的表的数据就减少了,提高了查询的性能。尤其当两个大表连接时,或处 理一些需要计算后才能参与连接或查询的字段时,增加冗余字段可以显著地提高查询效率。 2 索引调整 索引是对数据库表中一个或多个列的值进行排序的结构。索引 ](P ”提供指针以指向存储在表中指 *收稿日期:2005—12—25 作者简介:徐寿芳(1974一),女,江苏盐城人,湖州职业技术学院经贸分院讲师,硕士,主要从事信息技术和图像处理研究;方东傅 (1966一),男,浙江海盐人,湖州职业技术学院理工分院副院长,副教授,主要从事管理信息系统开发研究。 维普资讯 http://www.cqvip.com

第3期 徐寿芳,方东傅:基于SQL Server的数据库查询优化分析 87 定列的数据值,然后根据指定的排序次序排列这些指针。利用它可以快速访问数据库表中的特定信息。 索引按数据库中数据的排列顺序和索引顺序是否一致,又可分为聚集索引和非聚集索引。根据索引的结 构,在查询优化时可以通过调整索引,以取得更好的查询效率。 2.1 索引结构 聚集索引E23(Pis)基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为 数据行本身只能按一个顺序存储。数据行本身构成聚集索引的最低级别。只有当表包含聚集索引时,表 内的数据行才按排序次序存储。如果表没有聚集索引,则其数据行按堆集方式存储。由于数据行按基于 聚集索引键的排序次序存储,因此聚集索引对查找行很有效。特别对那些经常要搜索范围值的列特别有 效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。 非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个 键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。只有在表上创建了 聚集索引时,表内的行才按特定的顺序存储。这些行就基于聚集索引键按顺序存储。如果一个表只有非 聚集索引,它的数据行将按无序的堆集方式存储。 2.2 索引的使用 表1总结了何时使用聚集索引或非聚集索引。但在实践中以上规则却很容易被忽视或不能根据实 际情况进行综合分析。在实践中遇到索引使用的误区主要有两类。 表I 索引使用的场合 2.2.1 主键就是聚集索引,只要建立索引就能显著提高查询速度 聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则使得聚集索引变得更加珍贵。 使用聚集索引的最大好处就是能根据查询要求,迅速缩小查询范围,避免全表扫描。虽然SQL Server默 认是在主键上建立聚集索引的,但主键就是聚集索引是一种极端,有时是对聚集索引的一种浪费。 通常,在每个表的设计中都建立一个ID列,以区分每条记录数据,将该列设为主键,SQL Server会 将此列默认为聚集索引,这样可以实现记录数据在数据库中按照ID进行物理排序,但意义不大。因为 ID号是自动生成的,若不知道每条记录的ID号,很难在实践中用ID号来进行查询。这就使让ID号这 个主键作为聚集索引成为一种资源浪费。 2.2.2把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度 在进行数据查询时都离不开数据列有多个,都很重要,可以把他们合并起来,建立一个复合索引。从 实际应用中,可以验证到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的 查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而 如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。如果复合索引的所 有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,无论是否 经常使用聚合索引的其他列,但其前导列应该是使用最频繁的列。 在实践中,索引使用有如下特点:(1)用聚合索引比用不是聚合索引的主键速度快;(2)用聚合索引比 用一般的主键作order by时速度快,特别是在小数据量情况下,但数据量如果很大的话,则二者的速度差 别不明显;(3)使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论 聚合索引使用了多少个;(4)日期列不会因为有分秒的输入而减慢查询速度。 3 SQL语句优化 SQL查询处理处理器 。](P 。 主要有查询编译、查询执行两部分组成,其中查询编译包括选择逻辑查询 维普资讯 http://www.cqvip.com

88 湖州职业技术学院学报 2006正 计划和选择物理查询计划两个主要部分,查询处理器执行查询过程如图1所示,SQL查询经过查询编译 得到查询计划的过程如图2所示。 查询 1 r 分析查询 查询表达式树 1 r 元 选择逻辑查询计划 数 据 逻辑查询计划树 1 r 选择物理查询计划 执行计划 圈1 查询处理器的主要部分 圈2 查询编译过程 在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一 个阶段可以被用作一个扫描参数(SARG),[4](P51-54)那么就称之为可优化的,并且可以利用索引快速获得 所需数据。SARG是用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值的范围内的匹 配或者两个以上条件的AND连接。形式如下:列名操作符<常数或变量>或<常数或变量>操作符列名。 如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,因此SQL Server必须对 每一行都判断它是否满足WHERE子句中的所有条件。 我们总结了在实践中使用SARG的经验: ①Like语句是否属于SARG取决于所使用的通配符的类型。如:name 1ike‘张 ’,这就属于 SARG,而:name like‘ 张’,就不属于SARG。原因是通配符 在字符串的开通使得索引无法使用。 ②or会引起全表扫描。Name一’张三’and价格>5 000符合SARG,而:Name=’张三’or价格> 5000则不符合SARG。使用or会引起全表扫描。 ③非操作符、函数引起的不满足SARG形式的语句。不满足SARG形式的语句最典型的情况就是 包括非操作符的语句,如:NoT、!一、<>、!<、!>、NoT EXISTS、NOT IN、NoT LIKE等,另外还 有函数。ABS(价格)<5000、Name 1ike‘ 三’等,而有些表达式,如:WHERE价格*2>5000,SQL SERvER也会认为是SARG,SQL SERVER会将此式转化为:WHERE价格>2500/2。但要注意有时 SQL Server不能保证这种转化与原始表达式是完全等价的。 ④IN的作用相当与oR。如语句:Select-X-from table1 where rid in(2,3)和Select-X-from tablel where tid=2 or tid=3是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。 4 结束语 现代数据库规模越来越大,数据量呈指数级上升,数据库查询性能的优化越来越引起人们的重视。 本文基于SQL的标准查询语句阐述了基本的数据库性能优化方法,通过优化数据库结构、调整索引、规 范SQL语句来提高数据库系统的整体性能。 参考文献: [1]Karen Hogoboom.SYBASE系统管理员手册[M].北京:机械工业出版社,1998. [2]《程序员》杂志社.程序员2003合订本(下)FM].北京:电子工业出版社,2004. [3]郭盈发,张红娟.数据库原理(第二版)[M].西安:西安电子科技大学出版社,2002 [4]尹萍.SQL Server数据库性能优化[刀.计算机应用与软件,2005,22,(O3). 

因篇幅问题不能全部显示,请点此查看更多更全内容