收藏 分享(赏)

ch.7查询处理与查询优化.ppt

上传人:11xg27ws 文档编号:6944027 上传时间:2019-04-28 格式:PPT 页数:26 大小:222.50KB
下载 相关 举报
ch.7查询处理与查询优化.ppt_第1页
第1页 / 共26页
ch.7查询处理与查询优化.ppt_第2页
第2页 / 共26页
ch.7查询处理与查询优化.ppt_第3页
第3页 / 共26页
ch.7查询处理与查询优化.ppt_第4页
第4页 / 共26页
ch.7查询处理与查询优化.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、2019年4月28日星期日11时2分47秒,数据库教程(06.8),1,第三部分 系统篇,ch.7查询处理与查询优化 查询是数据库系统中使用最频繁、最基本的操作。对于一个给定的查询,通常会有许多种可能的执行策略,查询优化就是从众多策略中找出高效执行策略的处理过程,是DBMS实现的关键技术,对系统性能有很大影响。1、引言2、代数优化3、物理优化,2019年4月28日星期日11时2分47秒,数据库教程(06.8),2,ch.7 1.引言,1、引言 (1)、查询处理过程,2019年4月28日星期日11时2分47秒,数据库教程(06.8),3,ch.7 1.引言,(2)、 查询优化分类 查询优化大致可

2、分成以下四类: 1)规则优化仅根据一般能提高查询效率的规则,选择执行的策略。例如让选择、投影等一元操作先做,再做连接等二元操作。 2)代数优化先把查询语句转换成某种内部表示,通常是语法树,然后应用等价变换规则进行优化。例如依据已经经过证明的规则交换一元和二元操作的顺序,缩短执行时间。这种查询优化方法仅涉及查询语句本身,而不涉及存取路径,又称独立于存取路径的优化。 3)物理优化合理选择各种操作的存取路径,以取得显著的优化效果。例如考虑如何执行查询,是否存在索引或者其它的物理存取路径、数据值的分布情况等。又称为依赖于存取路径的优化。 4)、代价估算优化构造一组查询执行策略,进行代价估算,从中选择一

3、个代价最低的。一般地讲,产生所有的执行策略不太可能,这会造成选择本身代价太大,将产生的策略的数目保持在一定范围内才是比较合理的。,数据库教程(06.8),4,ch.7 1.引言,(3)、一个启发性的例子 例7-1 设有Shop(商店),Customer(顾客),SC(购物关系)三个关系,关系模式如下:Shop (S#,Sname,Address)Customer (C#,Cname,Address)SC(S#,C#, Item, Quantity,Price)查询是“给出销售彩电的商店名称” 1)、用SQL语句表达如下:SELECT Sname FROM Shop,SCWHERE Shop.S

4、# SC.S# AND Item=彩电 2)、用关系代数表达式表达这个查询语句:Sname(Shop.S# SC.S# Item=彩电 (ShopSC) 选择条件Shop.S# SC.S#与笛卡儿积组合成连接操作:Sname(Item=彩电(Shop SC) 选择条件Item=彩电还可以移到连接中的关系SC前面:Sname(ShopItem=彩电(SC),2019年4月28日星期日11时2分47秒,数据库教程(06.8),5,ch.7 1.引言,假设商店-顾客数据库中有500家商店和10000个销售记录,其中卖出过彩电的销售记录只有50个。可以看到虽然这三个关系代数的表达式是等价的,但是执行的

5、效率却相差很大。执行第一个表达式花费的时间总计约50000秒 (13.89小时)执行第二个表达式花费的时间总计约152.5秒 (2.54分钟)执行第三个表达式花费的时间总计约7.5秒 这个例子充分说明查询优化是必要的,实际中怎样的优化是可能的。例如,可以的情况下,先做选择后做连接,而不是先做连接后做选择。,2019年4月28日星期日11时2分47秒,数据库教程(06.8),6,ch.7 2.代数优化,2、代数优化 (1)、代数优化的基本原则 1)、选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条。它常常可使执行时节约几个数量级,因为选择运算一般使计算的中间结果大大变小。 2)、在执行

6、连接前对关系适当地预处理。预处理方法主要有两种,在连接属性上建立索引和对关系排序,然后执行连接。第一种称为索引连接方法,第二种称为排序合并(SORT-MERGE)连接方法。 3)、将投影运算和选择运算同时进行。如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。,2019年4月28日星期日11时2分47秒,数据库教程(06.8),7,ch.7 2.代数优化,4)、把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。 5)、将某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要

7、比同样关系上的笛卡尔积省很多时间。 6)、找出公共子表达式。如果这种重复出现的子表达式的结果不是很大的关系,并且从外存中读人这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写人中间文件。当查询的是视图时,定义视图的表达式就可成为公共子表达式。 公共子表达式并把结果写人中间文件。当查询的是视图时,定义视图的表达式就可成为公共子表达式。,2019年4月28日星期日11时2分47秒,数据库教程(06.8),8,ch.7 2.代数优化,(2)代数优化的等价变换规则 1)、选择的串接 c1(c2(cn (E)c1AND c2ANDcn(E) 2)、选择的交换 c1(c2(E)c2(

8、c1(E) 3)、投影的串接. L1(L2(Ln(E) L1(E) 4)、选择与投影的交换. L(C(E)C(L(E) 5)、连接笛卡儿积的交换率 E1 E2E2 E1 / E1E2E2E1,2019年4月28日星期日11时2分47秒,数据库教程(06.8),9,ch.7 2.代数优化,6)、选择对连接笛卡儿积的分配率. c(E1 E2) (c (E1) E2 c(E1E2) (c (E1)E2 7)、投影对连接笛卡儿积的分配率. L1L2(E1 E2) L1 (E1) L2 (E2) L1L2(E1E2) L1 (E1) L2 (E2) 8)、选择对、的分配率 c(E1E2) c(E1) c

9、(E2) c(E1E2) c(E1) c(E2) c(E1E2) c(E1) c(E2) 9)、投影对的分配率. L (E1E2) L (E1) L (E2) 10)、 、的结合率 (E1 E2) E3E1 (E2 E3),2019年4月28日星期日11时2分47秒,数据库教程(06.8),10,ch.7 2.代数优化,(3)代数优化算法 算法7-1:关系代数表达式的优化算法。输入:一个关系代数表达式的语法树。输出:经过代数优化后计算该表达式的程序。方法:主要包括以下基本步骤。 应用7.2.2小节中提到的等价变换规则(1),把形如c1AND c2ANDcn(E)的子表达式转换为c1(c2(cn

10、 (E)。 对每个选择操作,利用涉及选择的规则,尽可能将选择操作下推移向树叶方向。及早执行选择操作可以减少对中间结果进行排序的代价。 对每个投影操作,利用涉及投影的规则,尽可能将投影操作下推移向树叶方向。 注意:规则(3)会使某些投影操作消失,规则(4)可能会把一个投影分裂成两个,其中一个有可能移向树的叶端。若一个投影涵盖被投影的表达式的所有属性,则可消去该投影操作。 使用规则(1)(3)(4)将选择和投影串接成单个选择、单个投影或一个选择后跟一个投影。使多个选择、投影能同时执行,或在一次扫描中全部完成。 将经过上述步骤得到的语法树的内结点分组。每个二元操作(,)结点和它的直接祖先(不超过别的

11、二元操作结点)的一元操作结点(或)为一组。如果其后代直到叶子结点都是一元操作,则也将它们并入该组。注意:如果二元操作是笛卡儿积,而且它后面的选择又不能与它结合为等值连接时,选择条件要单独分为一组。 最后输出程序,每组结点的计算是程序中的一步。各步的顺序是任意的,但要保证任何一组的计算不会在其后代组之前计算。,2019年4月28日星期日11时2分47秒,数据库教程(06.8),11,ch.7 2.代数优化,例7-2 设有Shop(商店),Customer(顾客),SC(购物关系)三个关系,关系模式如下: Shop (S#,Sname,Address) Customer (C#,Cname,Add

12、ress) SC(S#,C#, Item, Quantity,Price) 查询语句是“找出西安销售给顾客“张立”彩电的商店编号和名称”,用SQL语句表达如下: SELECT S#,Sname FROM Shop,Customer,SC WHERE Shop.Address=西安 AND Cname=张立 AND Item=彩电 AND Shop.S# SC.S# AND Customer.C#=SC.C# 假设该查询变换成的关系代数表达式如下: S#,Sname(Shop.Address=西安 Cname=张立 Item=彩电 Shop.S# SC.S# Customer.C#=SC.C#

13、(ShopSCCustomer),2019年4月28日星期日11时2分47秒,数据库教程(06.8),12,ch.7 2.代数优化,原始查询树,2019年4月28日星期日11时2分47秒,数据库教程(06.8),13,ch.7 2.代数优化,选择操作尽量下移,2019年4月28日星期日11时2分47秒,数据库教程(06.8),14,ch.7 2.代数优化,投影操作下移,2019年4月28日星期日11时2分47秒,数据库教程(06.8),15,ch.7 2.代数优化,连接条件和笛卡儿积组合成连接操作,2019年4月28日星期日11时2分47秒,数据库教程(06.8),16,ch.7 3.物理优化

14、,3、物理优化数据库实现的基础是文件,对数据库的任何操作最终都会落实为对文件的操作。关系数据库中,数据和存取路径分离。后者对用户是隐蔽的,可以动态建立、删除,例如顺序扫描、索引、散列等。理论研究和实际应用说明,选择合适的存取路径,能够收到显著的优化效果,应成为优化的重点。然而,前面介绍的代数优化并没有利用存取路径的便利,对各种操作的执行策略进行选择,只是利用一些变换规则来调整和重新安排操作的次序和组合,优化效果也是很有限的。因此,充分考虑存取路径,利用它们进一步改善查询效率,具有非常重要的意义。依赖于存取路径的规则优化,即物理优化,决定如何执行查询,基本策略是将表达式看成是由一系列关系操作(选

15、择、连接、投影、集合运算等)构成,各种操作间保持一定的相互依赖关系。对于每个可能的操作,都具有一组可用的实现技术. (1)、选择 (2)、连接 (3) 、投影 (4)、集合运算,2019年4月28日星期日11时2分47秒,数据库教程(06.8),17,ch.7 3.物理优化,(1)、选择选择操作执行策略,与选择条件、可用的存取路径以及选取的元组数在整个关系中所占的比例有关,分成下列几种情况来实现。 1)、顺序扫描法(对被选择关系的每个文件块均被扫描,并且按选择条件对所有元组检验,在选中的元组数在关系中占有较大的比例或小关系情况下,值得使用 .) 2)、使用索引的选择(索引是用得最多的一种存取路

16、径,可以快速、直接、有序地存取元组。索引的建立在一定程度上提高了查询的效率,但在更新时,增加了维护索引的开销,并且带来了访问那些包含索引的物理块的额外代价。因此,要根据应用的要求权衡得失,索引并不是越多越好。) 3)、复合选择(由简单选择条件通过AND(合取)、OR(析取)连接而成的复合选择条件。对于合取选择、析取选择分别进行分析,选择最有效的存取路径。),2019年4月28日星期日11时2分47秒,数据库教程(06.8),18,ch.7 3.物理优化,(2)连接 连接是从两个关系的笛卡儿积中选择满足连接条件的元组,操作本身开销大,并且可能产生大的中间结果。因此,查询优化研究的一个重点就是提供

17、适合各种情况的连接操作实现方法,从而保证获得好的优化结果。 1)、嵌套循环连接算法,2019年4月28日星期日11时2分47秒,数据库教程(06.8),19,ch.7 3.物理优化,2)、索引嵌套循环连接算法(在特定的环境下,关系上建立的有效索引和嵌套循环法相比,将代价降低很多,如果两个关系都有索引,一般效率较高的方法是把元组较少的关系作为外关系。) 3)、排序归并连接算法pR:=1;/*代表排序后关系R的元组序列号*/pS:=1;/*代表排序后关系S的元组序列号*/while(pRnR and pSnS)doif (SpS.B加到结果集; / 属性值相等情况进行连接v:= pS+1; /找出

18、关系S中所有属性值相等情况进行连接while(pSnS and Sv.B=RpR.A)do 元组加到结果集;v:=v+1;v:= pR+1; / 找出关系R中所有属性值相等情况进行连接while(pRnR and SpS.B=Rv.A)do元组加到结果集;v:=v+1;pR:=pR+1;else pR:=pR+1;,2019年4月28日星期日11时2分47秒,数据库教程(06.8),20,ch.7 3.物理优化,4)、散列连接算法,2019年4月28日星期日11时2分47秒,数据库教程(06.8),21,ch.7 3.物理优化,(3) 投影 用散列消除重复元组的投影算法,2019年4月28日星

19、期日11时2分47秒,数据库教程(06.8),22,ch.7 3.物理优化,(4)集合运算 传统的集合运算是二元的,包括并、差、交、笛卡儿积四种运算。此处给出排序并操作算法、排序交操作算法、排序差操作算法,通常用嵌套循环算法实现笛卡儿积,算法耗时较多,并且结果比参与运算的关系大得多,因此要尽量少用。),2019年4月28日星期日11时2分47秒,数据库教程(06.8),23,ch.7 3.物理优化,排序并操作算法,2019年4月28日星期日11时2分47秒,数据库教程(06.8),24,ch.7 3.物理优化,排序交操作算法,2019年4月28日星期日11时2分47秒,数据库教程(06.8),25,ch.7 3.物理优化,排序差操作算法,2019年4月28日星期日11时2分47秒,数据库教程(06.8),26,本章小结,1.引言(查询处理过程;查询优化分类;一个启发性的例子- 查询优化必要性) 2.代数优化(代数优化的基本原则;代数优化的等价变换规 则;代数优化算法;语法树的转化) 3.物理优化(分别选择、连接、投影、集合运算考虑存取路径,利用它们进一步改善查询效率。),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报