您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第九章关系查询处理和查询优化.
9.1关系数据库系统的查询处理9.2关系数据库系统的查询优化9.3代数优化9.4物理优化9.5小结第9章关系查询处理和查询优化9.1.1查询处理步骤9.1.2实现查询操作的算法示例9.1关系数据库系统的查询处理RDBMS查询处理分4个阶段:1.查询分析2.查询检查3.查询优化4.查询执行9.1.1查询处理步骤1查询分析–语句扫描、词法分析、语法检查和分析–符合SQL语法规则?2查询检查–根据数据字典对合法的查询语句进行语义检查。–属性、关系名存在否?–权限和完整性约束?–SQL→关系代数表达式–用查询树、语法分析树表达关系代数表达式–数据库外部名称转换为内部表示3查询优化–选择一个高效的查询处理策略–查询优化分类•代数优化•物理优化4查询执行–根据优化器得到的执行策略生成查询计划–由代码生成器生成执行这个查询计划的代码9.1.1查询处理步骤9.1.2实现查询操作的算法示例9.1关系数据库系统的查询处理一、选择操作的实现【例1】Select*fromstudentwhere条件表达式考虑条件表达式的几种情况:C1:无条件;C2:Sno='200215121';C3:Sage20;C4:Sdept='CS'ANDSage20•简单的全表扫描方法•索引(或散列)扫描方法9.1.2查询操作算法示例选择操作典型实现方法:•简单的全表扫描方法Ø对表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元祖作为结果输出。•索引(或散列)扫描方法Ø选择条件中的属性上有索引(例如B+树索引或Hash索引)Ø通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在基本表中找到元组二、连接操作的实现【例2】SELECT*FROMStudent,SCWHEREStudent.Sno=SC.Sno•嵌套循环方法(nestedloop)•排序-合并方法(sort-mergejoin或mergejoin)•索引连接(indexjoin)方法•HashJoin方法9.1关系数据库系统的查询处理9.2关系数据库系统的查询优化9.3代数优化9.4物理优化9.5小结第9章关系查询处理和查询优化•必要性–查询优化在关系数据库系统中有着非常重要的地位–关系查询优化是影响RDBMS性能的关键因素•可行性–由于关系表达式的语义级别很高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性9.2关系数据库系统的查询优化查询优化的优点•用户不必考虑HowToDo•系统可以比用户做得更好(更“优化”)1)优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息2)如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。3)优化器可以考虑数百种不同的执行计划,程序员一般只能考虑有限的几种可能性。4)优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术代价模型•集中式数据库–磁盘存取块数(I/O代价)*–处理机时间(CPU代价)–查询的内存开销(多用户情形)•分布式数据库–I/O代价+CPU代价+内存代价+通信代价查询优化的总目标–选择有效的策略–求得给定关系表达式的值–使得查询代价最小(实际上是较小)【例3】求选修了2号课程的学生姓名。用SQL语言表达:selectstudent.snamefromstudent,SCwherestudent.sno=SC.snoandSC.cno=‘2’假定数据库中有1000个学生记录,10000个选课记录,其中选2号课程的记录为50个。9.2关系数据库系统的查询优化系统可以用多种等价的关系代数表达式来完成这一查询(用S代表Student):Q1=Sname(S.sno=SC.sno∧SC.Cno=‘2’(S×SC))Q2=Sname(SC.Cno=‘2’(SSC))Q3=Sname(SSC.Cno=‘2’(SC))我们仅以上述三种情况为代表,来作分析。Q1:Sname(S.sno=SC.sno∧SC.Cno=‘2’(S×SC))学号Sno姓名Sname05001李勇05002刘晨S(1000行)学号Sno课程号Cno成绩Grade05001192050012850500138805002290SC(10000行)×=(10000000行)Q2:Sname(SC.Cno=‘2’(SCS))学号Sno姓名Sname05001李勇05002刘晨S(1000行)学号Sno课程号Cno成绩Grade05001192050012850500138805002290SC(10000行)=10000行Q3:Sname(SSC.Cno=‘2’(SC))学号Sno姓名Sname05001李勇05002刘晨S(1000行)学号Sno课程号Cno成绩Grade0500128505002290…(SC)(50行)=50行Q4:Sname(SSC.Cno=‘2’(SC))学号Sno姓名Sname05001李勇05002刘晨S(1000行)学号Sno课程号Cno成绩Grade05001192050012850500229005001388…(SC)(50行)=50行•把代数表达式Q1变换为Q2、Q3–有选择和连接操作时,先做选择操作,可大大减少连接的元组,这是代数优化•在Q3/Q4中–SC表的选择操作算法有全表扫描和索引扫描2种方法,索引扫描方法较优–对于Student和SC表的连接,利用SC表上的索引,采用indexjoin代价较小,这就是物理优化9.1关系数据库系统的查询处理9.2关系数据库系统的查询优化9.3代数优化9.4物理优化9.5小结第9章关系查询处理和查询优化基于关系代数等价变换规则的优化方法,即代数优化。SQL语句经过查询分析、查询检查后变换为查询树,是关系代数表达式的内部表示。9.3.1关系代数表达式等价变换规则9.3.2查询树的启发式优化9.3代数优化l.连接、笛卡尔积交换律E1×E2≡E2×E1E1E2≡E2E1E1FE2≡E2FE12.连接、笛卡尔积的结合律(E1×E2)×E3≡E1×(E2×E3)(E1E2)E3≡E1(E2E3)(E1E2)E3≡E1(E2E3)FFFF9.3.1关系代数的等价变换规则3.投影的串接定律πA1,A2,,An(πB1,B2,,Bm(E))≡πA1,A2,,An(E)假设:1)E是关系代数表达式2)Ai(i=1,2,…,n),Bj(j=l,2,…,m)是属性名3){A1,A2,…,An}构成{Bl,B2,…,Bm}的子集9.3.1关系代数的等价变换规则4.选择的串接定律бF1(бF2(E))≡бF1∧F2(E)–选择的串接律说明选择条件可以合并–这样一次就可检查全部条件。9.3.1关系代数的等价变换规则5.选择与投影的交换律(1)假设:选择条件F只涉及属性A1,…,AnбF(πA1,A2,,An(E))≡πA1,A2,,An(бF(E))(2)假设:F中有不属于A1,…,An的属性B1,…,BmπA1,A2,,An(бF(E))≡πA1,A2,,An(бF(πA1,A2,,An,B1,B2,,Bm(E)))9.3.1关系代数的等价变换规则6.选择与笛卡尔积的交换律(1)假设:F中涉及的属性都是E1中的属性бF(E1×E2)≡бF(E1)×E2(2)假设:F=F1∧F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出:бF(E1×E2)≡бF1(E1)×бF2(E2)(3)假设:F=F1∧F2,F1只涉及E1中的属性,F2涉及E1和E2两者的属性бF(E1×E2)≡бF2(бF1(E1)×E2)它使部分选择在笛卡尔积前先做9.3.1关系代数的等价变换规则7.选择与并的交换(分配律)假设:E=E1∪E2,E1,E2有相同的属性名бF(E1∪E2)≡бF(E1)∪бF(E2)8.选择与差运算的交换(分配律)假设:E1与E2有相同的属性名бF(E1-E2)≡бF(E1)-бF(E2)9.3.1关系代数的等价变换规则9.选择对自然连接的分配律σF(E1E2)≡σF(E1)σF(E2)F只涉及E1与E2的公共属性9.3.1关系代数的等价变换规则10.投影与笛卡尔积的交换(分配律)假设:E1和E2是两个关系表达式,A1,…,An是E1的属性,B1,…,Bm是E2的属性πA1,A2,…,An,B1,B2,…,Bm(E1×E2)≡πA1,A2,…,An(E1)×πB1,B2,…,Bm(E2)9.3.1关系代数的等价变换规则11.投影与并的交换(分配律)假设:E1和E2有相同的属性名πA1,A2,…,An(E1∪E2)≡πA1,A2,…,An(E1)∪πA1,A2,…,An(E2)9.3.1关系代数的等价变换规则小结1-2:连接、笛卡尔积的交换律、结合律3:合并或分解投影运算4:合并或分解选择运算5-9:选择运算与其他运算交换5,10,11:投影运算与其他运算交换9.3.1关系代数的等价变换规则9.3.1关系代数表达式等价变换规则9.3.2查询树的启发式优化9.3代数优化启发式规则有:•选择运算应尽可能先做(最重要,最根本)–目的:减小中间关系•投影运算和选择运算同时做–目的:避免重复扫描关系•将投影运算与其前面或后面的双目运算结合–目的:减少扫描关系的遍数•在执行连接操作前对关系适当进行预处理–按连接属性排序–在连接属性上建立索引9.3.2查询树的启发式优化•某些选择运算+在其前面执行的笛卡尔积===连接运算例:бStudent.Sno=SC.Sno(Student×SC)StudentSC•提取公共子表达式算法:关系表达式的优化。输入:一个关系表达式的查询树。输出:优化的查询树。方法:(1)分解选择运算利用规则4把形如бF1∧F2∧…∧Fn(E)变换为бF1(бF2(…(бFn(E))…))(2)通过交换选择运算,将其尽可能移到叶端对每一个选择,利用规则4~9尽可能把它移到树的叶端。(3)通过交换投影运算,将其尽可能移到叶端对每一个投影利用规则3,11,l0,5中的一般形式尽可能把它移向树的叶端。9.3.2查询树的启发式优化(4)合并串接的选择和投影,以便能同时执行或在一次扫描中完成–利用规则3~5把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影。–使多个选择或投影能同时执行,或在一次扫描中全部完成–尽管这种变换似乎违背“投影尽可能早做”的原则,但这样做效率更高。(5)对内结点分组–把上述得到的语法树的内节点分组。–每一双目运算(×,,∪,-)和它所有的直接祖先(不越过别的二元运算结点)的一元运算结点(б或π)分为一组。如果其后代直到叶子全是单目运算,则也将它们并入该组。–但当双目运算是笛卡尔积(×),而且其后的选择不能与它结合为等值连接时,则不能将选择与这个×并成一组。9.3.2查询树的启发式优化【例4】下面给出[例3]中SQL语句的代数优化示例。(1)把SQL语句转换成查询树,如下图所示9.3.2查询树的启发式优化selectstudent.snamefromstudent,SCwherestudent.sno=SC.snoandSC.cno=‘2’(2)对查询树进行优化利用规则4、6把选择σSC.Cno=‘2’移到叶端,查询树便转换成下图所示的优化的查询树。这就是9.2.2节中Q3的查询树表示9.3.2查询树的启发式优化【例5】检索选修了“数据库”课程的女生学号与姓名。S(S#,Sname,Sbirth,Sex)C(C#,Cname)SC(S#,C#,Grade)该查询的关系代数表达式如下:S#,Sname(cname=‘数据库’^sex=‘女’(SCCS))9.3.2查询树的启发式优化关系代数的语法树:9.3.2查询树的启发式优化SCCScname=‘数据库’^sex=‘女’S#,Sname选择操作尽量下移:9.3.2查询树的启发式优化SC
本文标题:第九章关系查询处理和查询优化.
链接地址:https://www.777doc.com/doc-2123802 .html