chap9关系查询处理和查询优化_第1页
chap9关系查询处理和查询优化_第2页
chap9关系查询处理和查询优化_第3页
chap9关系查询处理和查询优化_第4页
chap9关系查询处理和查询优化_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、Lecture 关系查询处理和查询优化Zhang Yan-junDepartment of Computer, Handan CollegeOutline本章目的: RDBMS的查询处理步骤 查询优化的概念 基本方法和技术 查询优化分类 :代数优化物理优化9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化9.4 物理优化 9.5 小 结 B树、B-树和B+树B 树即二叉搜索树: 1. 所有非叶子结点至多拥有两个儿子( Left 和 Right ); 2. 所有结点存储一个关键字; 3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

2、B 树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果 B 树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么 B 树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变 B 树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销; 但 B 树在经过多次插入与删除后,有可能导致不同的结构: 右边也是一个 B 树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所

3、以,使用 B 树还要考虑尽可能让 B 树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题; 实际使用的 B 树都是在原 B 树的基础上加上平衡算法,即“平衡二叉树”;如何保持 B 树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在 B 树中插入和删除结点的策略;B树、B-树和B+树1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B-树,其定义如下: 一棵m阶的B-树满足下列条件: 树中每个结点至多有m个孩子; 除根结点和叶子结点外,其它每个结点至少有m/2个孩子; 若根结点不是叶子结点,则至少有2个孩子; 所有叶子结点

4、都出现在同一层,叶子结点不包含任何关键字信息; 有k个孩子的非终端结点恰好包含有k-1个关键字。 在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。 因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。 B树、B-树和B+树B树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,Kn,Pn) 其中,Ki为关键字,K1K2Kn, Pi 是指向包括Ki到Ki+1之间的关键

5、字的子树的指针。2. B树的查找:在B树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,kj查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查的关键字在某个Ki或Ki+1之间,于是取Pi所指的结点继续查找,直到找到,或指针Pi为空时查找失败。B树、B-树和B+树9.1 关系数据库系统的查询处理RDBMS查询处理阶段 : 1. 查询分析2. 查询检查3. 查询优化 4. 查询执行 9.1.1 查询处理步骤1.查询分析:对查询语句进行扫描识别出语言符号(SQL关键字、属性名、关系名等),进行语法检查、语法分析。 2.查

6、询检查:根据数据字典对合法的查询语句进行语义检查 根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查 检查通过后把SQL查询语句转换成等价的关系代数表达式 RDBMS一般都用查询树Query Tree(语法分析树Syntax tree)来表示扩展的关系代数表达式 把数据库对象的外部名称转换为内部表示 9.1.1 查询处理步骤3.查询优化:选择一个高效执行的查询处理策略。查询优化分类 :代数优化:指关系代数表达式的优化。物理优化:指存取路径和底层操作算法的选择。查询优化方法选择的依据:基于规则(rule based)。基于代价(cost based)。基于语义(semantic b

7、ased)。4.查询执行:依据优化器得到的执行策略生成查询计划。代码生成器(code generator)生成执行查询计划的代码 。9.1.2 实现查询操作的算法示例 一、 选择操作的实现: 例1Select * from student where ;考虑的几种情况:C1:无条件;C2:Sno200215121;C3:Sage20;C4:SdeptCS AND Sage20; 选择操作典型实现方法:1.简单的全表扫描方法 。2. 索引(或散列)扫描方法:适合选择条件中的属性上有索引(例如B+树索引或Hash索引) 。9.1.2 实现查询操作的算法示例二、 连接操作的实现 :连接操作是查询处理

8、中最耗时的操作之一。本节只讨论等值连接(或自然连接)最常用的实现算法。1. 嵌套循环方法(nested loop) 2. 排序-合并方法(sort-merge join 或merge join)3. 索引连接(index join)方法 4. Hash Join方法 9.2 关系数据库系统的查询优化 查询优化在关系数据库系统中有着非常重要的地位。关系查询优化是影响RDBMS性能的关键因素。 使用过程化的查询:要求用户有较高的数据库技术和程序设计水平,必须了解存取路径,决定查询策略。使用非过程化的查询:用户只要提出“干什么”,不必指出“怎么干”。系统会自动优化。查询优化的优点不仅在于用户不必考虑

9、如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好。优化器的作用详见P267。由于关系表达式的语义级别很高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性。 查询优化的总目标:选择有效的策略。求得给定关系表达式的值。使得查询代价最小(实际上是较小) 。9.2 关系数据库系统的查询优化RDBMS通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案。一.集中式数据库,执行开销主要包括:磁盘存取块数(I/O代价)是最主要的 处理机时间(CPU代价)查询的内存开销 二.分布式数据库:总代价=I/O代价+CPU代价+内存代价通信

10、代价 。例3 求选修了2号课程的学生姓名。用SQL表达: SELECT Student.SnameFROM Student,SCWHERE Student.Sno=SC.Sno AND SC.Cno=2; 假定学生-课程数据库中有1000个学生记录,10000个选课记录其中选修2号课程的选课记录为50个 9.2 关系数据库系统的查询优化系统可以用多种等价的关系代数表达式来完成这一查询。P267中将每种情况所需系统代价进行估算,得出以下结论:有选择和连接操作时,应当先进行选择操作代数优化。选择操作算法中全表扫描和索引扫描两种方法。Student和SC的连接操作采用Index Join代价较小。物

11、理优化。9.3 代数优化 9.3.1 关系代数表达式等价变换规则 9.3.2 查询树的启发式优化 代数优化策略:通过对关系代数表达式的等价变换来提高查询效率 。关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的。具体见P269。1. 连接、笛卡尔积交换律。2. 连接、笛卡尔积的结合律。3. 投影的串接定律。4. 选择的串接定律。5. 选择与投影操作的交换律。6. 选择与笛卡尔积的交换律7. 选择与并的分配律8. 选择与差运算的分配律9.3 代数优化9. 选择对自然连接的分配律10. 投影与笛卡尔积的分配律11. 投影与并的分配律9.3.2 查询树的启发式优化 典

12、型的启发式规则:1. 选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条2. 把投影运算和选择运算同时进行:如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。3. 把投影同其前或其后的双目运算结合起来:4. 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算。5. 找出公共子表达式:如果这种重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的。当查询的是视图时,定义视图的表达式就是公共子表达式的情况。9.3.2 查询树的启

13、发式优化遵循这些启发式规则,应用9.3.1的等价变换公式来优化关系表达式的算法。算法:关系表达式的优化输入:一个关系表达式的查询树输出:优化的查询树9.4 物理优化代数优化改变查询语句中操作的次序和组合,不涉及底层的存取路径。对于一个查询语句有许多存取方案,它们的执行效率不同, 仅仅进行代数优化是不够的 。物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划 。选择的方法: 基于规则的启发式优化。基于代价估算的优化。两者结合的优化方法。9.5 Oracle稳定执行计划什么是执行计划 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。我们给出了SQL语句

14、,指出了“做什么”,但“怎么做”是由数据库来决定的。对于复杂的SQL(表连接、嵌套子查询等),执行计划可能几十种甚至上百种,但是到底那种最好呢?我们事前并不知道,数据库本身也不知道,但是数据库会根据一定的规则或者统计信息(statistics)去选择一个执行计划,通常来说选择的是比较优的,但也有选择失误的时候,这就是这次讨论的价值所在。 Oracle优化器模式 Oracle优化器有两大类,基于规则的和基于代价的,在SQLPLUS中我们可以查看init文件中定义的缺省的优化器模式。SQL show parameters optimizer_mode 默认安装后数据库优化器模式为CHOOSE,我们

15、还可以设置为 RULE、FIRST_ROWS,ALL_ROWS。可以在init文件中对整个instance的所有会话设置,也可以单独对某个会话设置:SQL ALTER SESSION SET optimizer_mode= RULE;9.5 Oracle稳定执行计划基于规则的查询,数据库根据表和索引等定义信息,按照一定的规则来产生执行计划;基于代价的查询,数据库根据搜集的表和索引的数据的统计信息(通过analyze 命令或者使用dbms_stats包来搜集)综合来决定选取一个数据库认为最优的执行计划(实际上不一定最优)。RULE是基于规则的,CHOOSE表示如果查询的表存在搜集的统计信息则基于

16、代价来执行(在CHOOSE模式下Oracle采用的是 FIRST_ROWS),否则基于规则来执行。在基于代价的两种方式中,FIRST_ROWS指执行计划采用最少资源尽快的返回部分结果给客户端,对于排序分页页显示这种查询尤其适用,ALL_ROWS指以总体消耗资源最少的方式返回结果给客户端。基于规则的模式下,数据库的执行计划通常比较稳定。但在基于代价的模式下,我们才有更大的机会选择最优的执行计划。也由于Oracle的很多查询方面的特性必须在基于代价的模式下才能体现出来,所以我们通常不选择RULE(并且Oracle宣称从 Oracle 10i版本数据库开始将不再支持 RULE)。既然是基于代价的模式

17、,也就是说执行计划的选择是根据表、索引等定义和数据的统计信息来决定的,这个统计信息是根据 analyze 命令或者dbms_stats包来定期搜集的。首先存在着一种可能,就是由于搜集信息是一个很消耗资源和时间的动作,尤其当表数据量很大的时候,因为搜集信息是对整个表数据进行重新的完全统计,所以这是我们必须慎重考虑的问题。我们只能在服务器空闲的时候定期的进行信息搜集。9.5 Oracle稳定执行计划这说明我们在一段时期内,统计信息可能和数据库本身的数据并不吻合;另外就是Oracle的统计数据本身也存在着不精确部分(详细参考Oracle DOCUMENT),更重要的一个问题就是及时统计数据相对已经比

18、较准确,但是Oracle的优化器的选择也并不是始终是最优的方案。这也倚赖于Oracle对不同执行计划的代价的计算规则(我们通常是无法知道具体的计算规则的)。这好比我们决定从香港还是从北京去英国,车票、机票等实际价格到底是怎么核算出来的我们并不知道,或者说我们现在了解的价格信息,在我们乘车前往的时候,真实价格跟我们的预算已经发生了变化。所有的因素,都将影响我们的整个开销。 9.5 Oracle稳定执行计划执行计划稳定性能带给我们什么 Oracle存在着执行计划选择失误的可能。这也是我们经常遇见的一些现象,比如总有人说我的程序在测试数据库中跑的很好,但在产品数据库上就是跑的很差,甚至后者硬件条件比

19、前者还好,这到底是为什么?硬件资源、统计信息、参数设置都可能对执行计划产生影响。由于因素太多,我们总是对未来怀着一种莫名的恐惧,我的产品数据库上线后到底跑的好不好?于是Oracle提供了一种稳定执行计划的能力,也就是把在测试环境中的运行良好的执行计划所产生的OUTLINES移植到产品数据库,使得执行计划不会随着其他因素的变化而变化。 那么OUTLINES是什么呢?先要介绍一个内容,Oracle提供了在SQL中使用HINTS来引导优化器产生我们想要的执行计划的能力。这在多表连接、复杂查询中特别有效。HINTS的类型很多,可以设置优化器目标(RULE、CHOOSE、FIRST_ROWS、ALL_R

20、OWS),可以指定表连接的顺序,可以指定使用哪个表的哪个索引等等,可以对SQL进行很多精细的控制。通过这种方式产生我们想要的执行计划的这些HINTS,Oracle可以存储这些HINTS,我们称之为OUTLINES。通过STORE OUTLINES可以使得我们拥有以后产生相同执行计划的能力,也就是使我们拥有了稳定执行计划的能力。9.5 Oracle稳定执行计划最后说一下我们不得不使用执行计划稳定性能力的场合。我们假定Oracle的优化器的选择都是准确的,但是优化器选择的基础就是我们的SQL,这些SQL才从根本上决定了运行效率,这是更重要的一个优化的环节。SQL是基础(当然数据库的设计是基础的基础

21、),一个SQL写的好不好,就相当于我们同样是要想去英国,但是我的起点在珠海,你的起点却在西藏的最边缘偏僻的一个地方,那不管你做怎样的最优路线选择,你都不如我在珠海去英国所花费的代价小。怎样看oracle查询语句执行计划?SQLPLUS的AutoTrace是分析SQL的执行计划、执行效率的一个非常简单方便的工具。 1.如何设置和使用AUTOTRACE SQL connect sys/tiger as sysdba SQL ?/rdbms/admin/utlxplan.sql Table created. SQL create public synonym plan_table for plan_

22、table; Synonym created. SQL grant select,update,insert,delete on plan_table to public; Grant succeeded. SQL ?/sqlplus/admin/plustrce.sql SQLgrant plustrace to public2. 理解和使用AutoTrace :对于SQL 调整,使用Autotrace是最简单的方法了,我们只需要做: SQLSET AUTOTRACE ON :我们就可以看到我们SQL的执行计划,执行成本(PHYSICAL READ/CONSISTENT READ.),加上S

23、ET Timing On我们可以得到很多我们需要的数据。 然后在toad里面对某一条sql语句按下Ctrl+e就可以看到这条语句的执行计划了。9.6 Quest Toad在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of Oracle Application Developers)。在Toad的新版本中,还加入了DBA模块,可以帮助DBA完成许多日常管理工作。它最大的特点就是简单易用,访问速度快。使用T

24、oad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要具有如下特点: 模式浏览: 模式浏览功能可以让我们快速访问数据字典,浏览数据库中的表、索引、存储过程。Toad 提供对数据库的快速访问,使用极为方便,用户界面简洁,结构安排合理。当我们点击一个单独的数据库对象,Toad立即显示此对象的详细信息。例如,当我们点一个数据库的表,所有和此表相关的索引、约束、存储过程、SQL语句以及和其他表的相互引用关系都在同一界面显示出来。为

25、了简化操作,用户可以在浏览窗口操作数据库对象。9.6 Quest ToadSQL 编辑器:主要功能是编辑、运行和调整SQL语句。TOAD 的高级编辑窗口包括众多的特性来提高开发人员编写SQL语句的产品化程度。例如,简单地生成代码模板,在编写SQL前自动发现包的内容和列的名字等等。 SQL编辑器包括一个编辑窗口和运行结果窗口,允许开发人员在编辑的过程中测试运行结果。SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功

温馨提示

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

评论

0/150

提交评论