数据库管理系统中查询优化_第1页
数据库管理系统中查询优化_第2页
数据库管理系统中查询优化_第3页
数据库管理系统中查询优化_第4页
数据库管理系统中查询优化_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库管理系统中查询优化摘要:查询在数据库操作中有着广泛的应用,查询 语句的优劣直接影响数据库应用系统的性能。随着数据库技 术越来越广泛的应用,理解关系数据查询优化的方法,书写 合理高效的查询语句,可以使数据库应用系统的性能得到很 大程度的提升,进而提高人们的工作效率。本文主要讨论了 sql查询语句的优化,从而指出了查询优化在数据库管理系 统中的重要作用及优化技巧。关键词:关系数据库;查询优化;sql语句引言查询优化是数据库管理系统设计和实现所采用的一项 重要技术,也是影响数据库性能的关键因素。为了优化数据 库的性能,除了在数据库的物理设计,关系规范化等方面进 行改进外,还有一个简单有效的方法

2、就是通过设计高效合理 的查询计划提高查询响应速度。数据库管理系统处理查询计划的方式是:在做完查询语 句的词法、语法检查之后,将语句提交给数据库管理系统的 查询优化器进行代数优化和存取路径的优化,之后由预编译 模块处理语句并生成查询规划,然后在合适的时间交由系统 处理执行,最后将执行结果返回给用户。sql语句是对数据 库进行操作的唯一途径,应用程序的执行最终要归结为sql 语句的执行,sql语句的效率对数据库系统的性能起到了决 定性作用。因此对查询语句的优化是提高查询效率的根本。一、sql查询语句的优化策略影响数据库系统性能的因素很多,包括数据库连接方 式、应用系统架构、数据库设计、管理等。其中

3、最本质又至 关重要的是数据库管理系统本身的查询优化技术。通过分析 关系代数表达式的等价变换准则及查询代价,给定的sql查 询与关系代数表达式对应关系,研究出基于关系代数等价变 换规则的sql查询优化。此外,优化器的优化策略还与所查 询表的内容和其他一些与服务器有关的因素有关。因此对优 化器来讲,最为重要的选择就是使用什么索引和采用何种表 的连接手段。如果用户提交的sql语句和系统的索引体系是 一个不合理的查询计划,仅仅经过系统优化器的优化,根本 不可能变得高效。因此用户应合理适当的建立索引体系。二、sql查询的优化方法 设计高性能的sql语句的前提是:熟悉你所用的优化器的优化策略并深入理解数据

4、库中的数据,以及透彻的分析用 户的需求。在此基础上,才能尝试编写效率最高的sql语句, 优化程序设计。以下所举实例中使用的数据表来自工作实际 中的学生信息表(students )、教师信息表(teachers)以 及学生成绩表(sc)。1 合理使用常规优化查询观察下面两组查询语句,它们查询的结果都是一样,但 是查询的速度却有着明显的区别。第 1 组:select*from teachers where salary/25 =1000第 2 组:select*fr0m teachers where salary =1000 * 25第2组的语句,在经过了优化后,查询的速度减少了数 十倍。因为,数

5、据库优化器在面对第2组的sa.lary=1000* 25 时,会转换成salary=25000进行查询,却不能将第1组中 的salary/251000进行转换。鉴于此,应尽量写用常量跟 字段比较检索的表达式,而不要将字段置于表达式当中,否 则就没有办法进行优化。2.拆分子句优化查询使用了 in, or子句的查询语句,常会使工作表中索引 失效。在不会产生大量重复值的前提下,可以考虑把子句拆 分开,要求拆分的子句中应该包含索引。在where子句中的 “in”在逻辑上相当于” 0r”,所以数据库优化器会将sno in (' 01' ,'02')转化为 sno二'

6、;01' or sno二'02'来执行。这里采用了 “or策略”,就是将满足每个0r子句 的行取出,存入临时数据库的工作表中,再建立唯一索引去 掉重复行,最后从这个临时表中计算结果。因此,实际过程 中并没有利用sno的索引,这样还会因tempdb数据库性能 的不同而影响查询时间。假设在一个表table中有二十万行,其中no字段上有 非群集索引,则执行下面这条语句的速度将会非常慢:select*from table where no in (' o' , '1')当这个表中的行越来越多,速度也将越来越慢。如果我 们将这个or子句分开,变成:

7、select*from table where no二'o'select*from table where no= '1'然后将得到的结果进行uinio运算,执行的时间只需短 短数秒,因为这里的每句都使用了索引,由此提高了查询速 度。3使用存储过程优化查询存储过程是用sql语句和数据库编程语言编写的,完成 一定的数据访问功能或提供一定的服务过程,预先进行编译 和优化后,存储在服务器中,客户程序可以通过远程调用的 模式调用它们,因此在执行时不需要将应用程序代码向服务 器端传送,可以大大减轻网络负载。同时,由于存储过程已 编译为可执行代码,不需要每次执行时进行分析和

8、优化工 作,从而减少了预处理的时间,提高了效率。另一方面,使 用存储过程还易于维护,且表的结构改变时,不影响客户端 的应用程序。4.通过查询语句优化提高查询速度避免使用不兼容的数据类型查询的问题之一是在where子句中对有不同类型的列的 比较企图。例如 float 和 int; char 和 v ar char; binar y 和 varbinary是不兼容的。因此要求where子句中表达式的数 据类型是兼容的,数据类型的不兼容可能使优化器无法执行 一些本来可以进行的优化操作。避免或简化排序应当简化或避免对海量数据表进行重复的排序。当能够 利用索引自动以适当的次序产生输出时,优化器就避免了排

9、 序的步骤。以下是一些影响因素,索引中不包括一个或几个 待排序的列;group by或order by子句中列的次序与索引 的次序不一样;排序的列来自不同的表。为了避免不必要的 排序,就要正确地增建索引,合理地合并数据库表(尽管有 时可能影响表的规范化,但相对于效率的提高是值得的)。 如果排序不可避免,那么应当试图简化它,如缩小排序的列 的范围等。避免相关子查询若子查询中引用外层查询的值,就构成相关子查询。执 行时就不能象无关子查询那样,先单独处理子查询,再处理 外层查询,而需要外层查询和子查询交叉进行。先用外层查 询定位一行数据,这样子查询的引用就有了确定值,然后执 行子查询,得到结果后判定

10、外层查询定位的那行数据是否满 足条件,再取下一条记录,再执行子查询直到外层查询涉及的数据全部检查完为止。例如一个列的标签同时在主查 询和where子句中的查询中出现,那么很可能当主查询中的 列值改变之后,子查询必须重新查询一次。这样的查询嵌套 层次越多,效率越低,因此应当尽量避免子查询。三、结论以上所述只是对sql查询进行优化的方法,查询优化的重点环节是使得数据库服务器少从磁盘中读数据,同时尽量避免非顺序读页。要想实现sql的性能优化,还需要深人研 究数据库层的资源配置、网络层的流量控制以及操作系统层 的总体设计等。为了能更好地实现数据库应用系统优化,平 时需要多积累一些sql语句的优化技巧,充分利用硬件性能 和软件方法来解决。参考文献1 刘亚欣数据库查询优化技术研究及其应用d大连理工大学,2006, (12)2 郭玉栋、左金

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论