已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 查询处理和优化,5.1 引言 5.2 代数优化 5.3 依赖于存取路径的规则优化 5.4 代价估算优化*,5.1 引言,概述 查询是数据库系统中最基本、最常见和最复杂的操作。对数据库的查询一般都是以查询语言(如SQL)表示。从查询请求出发,直到得到查询结果,这一过程称为查询处理。 关系数据库系统的查询语言一般是“非过程语言”,它减轻了用户选择存取路径的负担。用户只要提出干什么,不必指出怎么干。即用户不必关心查询的具体执行过程,而由DBMS确定合理的、有效的执行策略。DBMS在这方面的作用称为查询优化 。 对于使用非过程查询语言的RDBMS,查询优化是查询处理中非常重要的一环,对系统性能会产生很大的影响。,5.1 引言,2.查询处理的一般过程 先做词法和语法分析,把查询语句变成语法树或语法图;然后进行查询优化,形成执行计划,生成可执行代码,交系统执行。 具体处理过程也可分为解释和编译两种实现方式。 解释方式如图61所示。 编译方式如图62所示。 对于常用的例行事务,编译方式可以显著地提高数据库性能。 对于那些不怎么重复使用的偶然查询,解释也不失为一种简单、实用的实现方式。这两种实现方式在现有的商用DBMS中都有应用。,5.1 引言,3. 例子 首先看一个简单的例子,说明为什么要进行查询优化。 例:求选修了2号课程的学生姓名。用SQL语言表达: SELECT Sname FROM S,SC WHERE S.SNO=SC.SNO AND SC.CNO=2; 假定学生-课程数据库中有l000个学生记录,l0000个选课记录,其中选修2号课程的选课记录为50个。 系统可以用多种等价的关系代数表达式来完成这一查询 1.Q1= Sname( S.sno=o=2(SSC) 2.Q2= Sname( o=2 (S | o= 2 (SC) 我们将看到由于查询执行的策略不同,查询时间相差很大。,5.1 引言,查询执行策略Q1代价分析 计算广义笛卡尔积的代价 把S和SC的每个元组连接起来。一般连接的做法是:在内存中尽可能多地装人某个表(如Student表)的若干块元组,留出一块存放另一个表(如SC表)的元组。然后把SC中的每个元组和S中每个元组连接,连接后的元组装满一块后就写到中间文件上,再从SC中读入一块和内存中的S元组连接,直到SC表处理完。这时再一次读入若干块S元组,读入一块SC元组,重复上述处理过程,直到把S表处理完。 设一个块能装l0个Student元组或l00个SC元组,在内存中存放5块Student元组 和l块SC元组,则读取总块数为: 1000/10+1000/(10 5) (10000/100)=2100块 其中读Student表l00块。读SC表20遍,每遍l00块。若每秒读写20块,则总计要花105(秒)。 连接后的元组数为100010000。设每块能装l0个元组,则写出这些块要花1000000/20=50000( 秒)。,5.1 引言,查询执行策略Q1代价分析(续) 选择操作的代价 依次读入连接后的元组,按照选择条件选取满足要求的的记录。假定内存处理时间忽略。这一步读取中间文件花费的时间(同写中间文件一样)需50000 秒。满足条件的元组假设仅50个,均可放在内存。 3) 投影操作的代价 把第2步的结果在Sname上作投影输出,得到最终结果。 因此第一种情况下执行查询的总时间约为105+2510000秒。这里,所有内存处理时间均忽略不计。,5.1 引言,查询执行策略Q2代价分析 计算自然连接的代价 为了执行自然连接,读取Student和SC表的策略不变,总的读取块数仍为2100块,花费l05秒。但自然连接的结果比第一种情况大大减少,为 10000个。因此写出这些元组时间为 10000/10/20=50秒。仅为第一种情况的千分之一。 读取中间文件块,执行选择运算,花费时间也为50秒。 将第2步结果投影输出。 因此,第二种情况总的执行时间105+50+50205秒。,5.1 引言,查询执行策略Q3代价分析 先对SC表作选择运算,只需读一遍SC表,存取l00块花费时间为5秒,因为满足条件的元组仅50个,不必使用中间文件。 读取STUDENT表,把读入的STUDENT元组和内存中的SC元组作连接。也只需读一遍STUDENT表共l00块花费时间为5秒。 把连接结果投影输出。 第三种情况总的执行时间5+510秒。,5.1 引言,假如SC表的Cno字段上有索引,第l步就不必读取所有的SC元组而只需读取CNO=2的那些元组(50个)。 存取的索引块和SC中满足条件的数据块大约总共34块。若STUDENT表在Sno上也有索引,则第2步也不必读取所有的STUDENT元组,因为满足条件的SC记录仅50个,涉及最多50个STUDENT记录,因此读取STUDENT表的块数也可大大减少。总的存取时间将进一步减少到数秒。 这个简单的例子充分说明了查询优化的必要性,同时也给了我们一些查询优化方法的初步概念。如当有选择和连接操作时,应当先做选择操作,这样参加连接的元组就可以大大减少。,5.1 引言,查询优化 代数优化:对查询语句进行变换 。 依赖于存取路径的优化(物理优化):根据系统所提供的存取路径,选择合理的存取策略。 规则优化:仅根据启发式规则,选择执行的策略。 代价估算优化:对可供选择的执行策略进行代价估算,从中选用代价最小的执行策略。,5.2 代数优化,5.2.1 关系代数等价变换规则 上面的优化策略大部分都涉及到代数表达式的变换。关系代数表达式的优化是查询优化的基本课题。而研究关系代数表达式的优化最好从研究关系表达式的等价变换规则开始。 两个关系表达式El和E2是等价的,可记为E1E2。 常用的等价变换规则有: (1)选择的串接 F1(F2(R)F1 F2(R) (2) 选择的交换 F1(F2(R)F2(F1(R),5.2 代数优化,(3)投影的串接. L1(L2(Ln(R) L1(R) 条件:L1 L2 Ln (4)选择与投影的交换. L(F(R)F(L(R) 条件:Attr(F)是L的子集 (5)连接笛卡儿积的交换律 R| R RSSR,5.2 代数优化,(6)选择对连接笛卡儿积的分配律 F(R|L2 (R) F F 条件: Attr(L1)Attr(S)=NULL, Attr(L2)Attr(R)=NULL Attr(F) Attr(L1L2),5.2 代数优化,(8)选择对、的分配律 F(RS) F(R) F(S) F(RS) F(R)F(S) F(RS) F(R)F(S) (9)投影对的分配率. L (RS) L (R) L (S) (10) |T),5.2 代数优化,5.2.2查询优化的一般策略 (1)优先 (2)使用频率高的属性建索引 (3)连接属性索引/排序 (4)、同时进行 (5)+ | (6)公共子表达式,5.2 代数优化,5.2.3 代数优化算法 步骤: SELECT子句对应,FROM子句对应,WHERE子句对应,生成查询语法树 利用规则(2),(6),(8)尽可能将选择操作移到树的叶端 利用投影的串接规则(3),合并投影,5.2 代数优化,利用连接、笛卡儿积的结合率,按照小关系先执行原则,调整连接、笛卡儿积的执行顺序* 将笛卡儿积与相关选择操作转换为连接操作 对叶节点加必要的 ,以消除对查询无用的属性。,5.2 代数优化,5.2.4 例子 例 设有Shop(商店),Customer(顾客),SC(购物关系)三个关系,关系模式如下: Shop (S#,Sname,Address) Customer (C#,Cname,Address) SC(S#,C#, Item, Quantity,Price) 查询是“找出西安销售给顾客“张立”彩电的商店编号和名称”,用SQL语句表达如下: SELECT S#,Sname FROM Shop,SC ,Customer WHERE Shop.Address=西安 AND Cname=张立 AND Item=彩 电 AND Shop.S# SC.S# AND Customer.C#=SC.C#,5.2 代数优化,假设该查询变换成的关系代数表达式如下: S#,Sname(Shop.Address=西安 Cname=张立 Item=彩电 Shop.S# SC.S# Customer.C#=SC.C# (ShopSC Customer) 该表达式可转换为下图所示的原始查询树表示。以SELECT子句对应投影操作,FROM子句对应笛卡儿积操作,WHERE子句对应选择操作,生成原始查询树。,5.2 代数优化,5.2 代数优化,现在使用优化算法对语法树进行优化。 应用规则变换选择条件C,可得到单独的五个选择操作: Shop.Address=西安 Cname=张立 Item=彩电 Shop.S# SC.S# Customer.C#=SC.C# 根据涉及选择的规则,尽可能将选择操作沿查询树下移。 由于操作Shop.Address=西安、Cname=张立、Item=彩电 分别只涉及关系Shop、Customer、SC,经过一系列变换,可以作为叶子结点的直接祖先。,5.2 代数优化,而操作Shop.S# SC.S#分别涉及到两个关系Shop和SC,可向下移动,与笛卡儿积交换位置。操作Customer.C#=SC.C#分别涉及到两个关系Customer和SC,不能再向下移向树叶方向。得到表达式: S#,Sname(Customer.C#=SC.C# (Shop.S# SC.S# (Shop.Address=西安(Shop)Item=彩电(SC) Cname=张立(Customer) 经过这一步,原始语法树变成下图的形式。,5.2 代数优化,5.2 代数优化,将选择与笛卡儿积合并为连接,5.2 代数优化,利用规则(3)、(7)下移。,5.2 代数优化,例:设有下列关系: S(SNUM,SNAME,CITY) P(PNUM,PNAME,WEIGHT,SIZE) SP(SNUM,PNUM,DEPT,QUAN) 和如下查询: SELECT SNAME FROM S,SP,P WHERE S.SNUM=SP.SNUM AND SP.PNUM=P.PNUM AND S.CITY=NJ AND P.PNAME=BLOT AND SP.QUAN10000;,5.2 代数优化,图6-3(a) Q的原始查询树(P125) 图6-3(b) 将选择操作尽量下推 图6-3(c) 将连接条件与笛卡儿积组合成连接操作 图6-3(d) 另一种查询执行方案 图6-3(e) 用投影操作消除对查询无用的属性,5.3 依赖于存取路径的优化,选择操作的实现和优化 选择操作的执行策略与选择条件、可用的存取路径以及满足选择条件的元组数在整个关系中所占的比例有关。 选择条件可分为:等值(=)、范围(,=,Between )和集合(IN)等几种。 复合选择条件由简单选择条件通过AND、OR连接而成。 选择操作的实现方法包括: (1) 顺序扫描:适用于小的关系,满足条件的元组比例较大或无其他存取路径。 (2) 利用各种存取路径:包括索引(B+树),动态散列 对于选择操作可按照下列启发式规则选取存取路径: (8) P128-129,5.3 依赖于存取路径的优化,连接操作的实现和优化 主要考虑二元连接(two-way join)。 多元连接(multi-may join)则以二元连接为基础。 实现连接操作一般有下列4种方法: 嵌套循环法(nested loop) 顺序扫描外关系的每一个元组,然后与内关系的每一个元组进行匹配 具体算法见P129 图6-4 设 bR ,bS分别表示R和S的物理块数,nB为可用的内存缓冲块数,并以其中(nB 1)块存放外关系,剩余的1块存放内关系。 若以R为外关系,S为内关系,用嵌套循环法进行连接需要访问的物理块数为: bR+bR/(nB-1) bS 若以S为外关系,R为内关系,用嵌套循环法进行连接需要访问的物理块数为: bS+bS/(nB-1) bR 比较上面2个式子,可以看出选择占用物理块少的关系作为外关系,5.3 依赖于存取路径的优化,连接操作的实现和优化(续) 利用索引或散列寻找匹配元组法 可有效减少I/O次数 排序归并(sort-merge)法 首先按连接属性对关系排序,然后进行归并连接 具体算法见P131 图6-6 散列连接法(hash join) 首先用散列函数将连接属性散列至文件中,然后对散列到同一个桶(Bucket)中的元组进行匹配。 有关连接操作实现策略的启发式规则: (1) (4) P131-132,5.3 依赖于存取路径的优化,投影操作的实现 投影操作一般可与选择、连接等操作同时进行,不再需要附加的I/O开销。 重复值的消除:排序,散列 具体实现算法见 P132 图6-7 集合操作的实现 对于笛卡儿积()一般可采用嵌套循环法; 对于、等操作需要发现共同元组 ; 具体算法见P133 图6-8 图6-9 图6-10 组合操作 减少临时文件,尽可能同时执行操作。,5.4 代价估算优化*,查询执行代价的组成与代价统计参数 查询执行代价主要包括3个方面: I/O代价(*) CPU代价 通信代价 访问磁盘1次所需的代价可表示为: CI/O=D0 + xD1 其中:x 存取数据的大小,以字节表示 D0 与x无关的I/O代价,包括寻道时间和等待时间 D1 每个字节所需的传输时间 一般D0 xD1 故 I/O代价=I/O次数 D0,5.4 代价估算优化,查询执行代价的组成与代价统计参数(续) 下面给出进行代价估算时将要用到的统计参数: nR:R中的元组数; PR : R块因子,即每个物理块中包含的元组数; Na: 属性A在一个关系中出现的不同值的个数; Fa: 属性A的选择因子,即属性A为某一个值的概率,一般假定属性值均匀分布, FA=1/ Na ; Ma:属性A的值域大小|DOM(A)|; L:索引的级数;,5.4 代价估算优化,选择操作的代价估算 (1) 顺序扫描 最多选取一个元组的I/O代价:Csa=0.5n/p=0.5 b 选取多个元组的I/O代价: Csb = b (2) 利用主键上的索引或散列进行等值查询 通过索引访问的I/O代价:Cik = L+1 通过散列访问的I/O代价:Chk = 1 (假定散列没有溢出) (3) 利用非主键上的无序索引进行等值查询 分析表明几乎每取一个元组都需要访问一个物理块,故 CINK = L + s 其中 s 为满足选择条件的元组数 (4) 利用聚簇索引进行等值查询 CCI = L + s/p (5) 利用聚簇索引进行范围查询 CCIR=L + b/2,5.4 代价估算优化,例:设有关系STUDENT,其统计数据及存取路径如下: n=10000 b=2000 即 p=5 在属性DEPT上建有聚簇索引:NDEPT = 25, L=2 在属性SNO上建有主键索引:NSNO = 10000, L=4 在属性DNO上建有辅助索引:NDNO = 20, L=3 在属性AGE上建有辅助索引:NAGE = 15, L=2 设有下列查询: Q1:SNO=992311(STUDENT) Q2:DEPT=CS(STUDENT) Q3:AGE=20(STUDENT) Q4:DEPT=CSAND DNO=108 AND AGE=20(STUDENT) 试用代价估算优化选取存取策略,并估算其执行代价。,5.4 代价估算优化,解: Q1:SNO=992311(STUDENT) 由于SNO上建有主索引,应优先采用主索引,其执行代价可估 算为: CQ1=L+1=4+1=5 Q2:DEPT=CS(STUDENT) DEPT上建有聚簇索引,故可不考虑顺序扫描。满足Q2的元组数s估计为: s=10000/25=400 由于STUDENT关系对DEPT是聚簇的,故I/O代价可估算为: CQ2=L + s/p = 2 + 400/5 = 82 Q3:AGE=20(STUDENT) 是范围查询。虽然在AGE上建有辅助(二次)索引,但不是聚簇索引。如果取一半元组,则使用索引还不如使用顺序扫描,故: CQ3 = b = 2000 Q4:查询条件是合取式。由于没有适当的多属性索引可用,只有2种 可能的策略:,5.4 代价估算优化,策略1:预查询法DEPT=CSAND DNO=108 AND AGE=20(STUDENT) 满足条件 DNO=108 的元组数估算为: n/NDNO = 10000/20 = 500
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- M32调音台基础培训
- 《渔歌子》教学设计一等奖
- 《护理管理学》教学大纲
- 《教育学原理》课件
- Catia软件基本操作讲解
- 自动化测试技术面试题和答案
- 《小英雄雨来》教案设计
- 智能制造技术测试题集与答案详解
- LED户外大屏应急预案
- 新能源汽车技术解析试题及答案
- 心血管-肾脏-代谢综合征(CKM)综合管理中国专家共识2025解读课件
- 临时解除限高申请书
- 2025春季学期国开河南电大本科补修课《汉语基础#》一平台无纸化考试(作业练习+我要考试)试题及答案
- 葡萄酒入门知识普及课件
- 《合同法与建筑工程》课件
- 护理意外事件应急预案
- 口腔科护理工作总结
- 宝武安全生产
- 基于战略的薪酬设计体系(课件)
- 国家开放大学(电大)管理信息系统形考1-4答案
- 城市旅游宣传片制作投标方案
评论
0/150
提交评论