《数据库系统概论》知识点总结 第九章

第九章 关系查询处理和查询优化

1.查询处理的步骤:

1)查询分析:对语句进行扫描、词法分析、语法分析。

2)查询检查:对合法查询语句进行语义分析,根据数据字典中有关模式的定义检查语句中的数据库对象比如关系名、属性名、是否存在和有效。(这时的完整性检查是初步的、静态的检查)

3)查询优化:分为代数优化和物理优化

4)查询执行

2.选择操作的实现:

1)简单的权标扫描算法(table scan):假设可以使用的内存为M块,则先按物理次序读Student的M块到内存;检查内存的每个元组t,如果t满足条件,则输出t;如果Student还有其他的块未处理,则重复上述步骤。

2)索引扫描算法(index scan):如果选择条件上有索引,则可以通过索引先找到满足条件的元组指针,在通过元组指针在查询的基本表中找到元组。

3.连接操作的实现:

1)嵌套循环算法(nested loop join):也就是两层for循环

2)排序-合并算法(sort-merge join 或 merge join):先将Student表和SC表按照Sno排序;取Student表第一个Sno,一次扫描SC表找到有相同Sno的元组,把他们连接起来;扫描到第一个不相同个Sno表的时候就停止扫描,转而继续进行Student表的第二个Sno元组的连接;重复上述步骤知道Student表扫描完毕。

3)索引连接算法(index join):在SC表上对Sno建立了索引;对Student 的每一个元组,有Sno值通过SC的索引查找相应的SC元组;将这些SC元组和Student元组连接起来;循环执行上述步骤知道Student表中的元组处理完为止。

4)hash join算法:第一步,划分阶段(building phase),也成为创建阶段,创建hash表,对第一个表进行hash散列处理;第二部,试探阶段(probing phase),对另一个表也进行相同的hash散列处理,找到适当的hash桶,把SC元组与桶中来自Student表并与之相匹配的元组连接起来。

4.启发式规则(heuristic rules):

1)选择运算应尽可能先做

2)把投影运算和选择运算同时进行

3)把投影及其前或后的双目运算结合起来

4)把某些选择同在它前面要执行的笛卡尔积结合起来称为一个连接运算

5)找出公共子表达式

5.关系表达式优化算法简述:

1)将条件想析取的选择变成嵌套的单个选择

2)将选择操作尽可能先做

3)将投影操作尽可能先做

4)将选择和投影的串接合并成单个选择、单个投影、或一个选择后跟一个投影,使多个选择或投影能同时执行,或在一次扫描中全部完成

5)把上述得到的语法树的内节点分组。每一个双目运算符和其直接祖先为一组(其直接祖先为选择或者投影运算),也就是说进行完连接或者合并之类的双目运算后可以进行选择或者投影运算,并且认为他们是一组运算,如果其后代到叶子节点都是单目运算的时候也将他们并为一组,但是当后面是笛卡尔积并且后面不是与他组成等值连接的选择时,则不能把选择与这个双目运算组成同一组,把这些单目运算单独分为一组。

PS:关于第5步的理解:加上条件后的双目运算符一般会是直接的双目运算符的子集,这样做就可以少一些步骤,比如先笛卡尔积然后再等值连接就会比较慢一点;后面笛卡尔积后面不是与他组成等值连接的选择的话,本身就是不能作为一组的运算。

6.物理优化的方法:基于规则的启发式优化;基于代价估算的优化;两者结合的优化方法

猜你喜欢

转载自blog.csdn.net/haohulala/article/details/82720517