本文正在参加「技术专题19期 漫谈数据库技术」活动
数据库中查询树的优化
在数据库的学习中,介于课上学习到查询树的优化问题,在此记录。
等价的概念
若关系表达式f(E1,E2,…,En)的结果与关系表达式g(E1,E2,…,En)的结果是同一个关系,那么称这两个表达式等价。
若关系表达式E1和E2是等价的可以记为:
等价变换规则
连接、笛卡儿积交换率 设E1和E2是关系代数表达式,F是连接运算的条件,则有:
连接、笛卡尔积的结合率
设E1,E2,E3是关系代数表达式,F1和F2是连接运算的条件,则有:
选择的串接定律
E是关系代数表达式,F1和F2是选择条件。选择的串接定律说明选择条件可以合并,这样一次就可以检查全部的条件。
优化规则:
- 选择运算尽可能先做。
- 投影运算和选择运算同时进行。
- 把投影运算同其前后的 双目运算结合执行。
- 选择运算和笛卡儿积运算结合成连接运算。
- 找出公共子表达式,避免重复运算。
优化算法:
- 利用规则4分解选择运算。
- 利用规则4~9把选择运算尽量移到叶端。
- 利用规则3,5,10,11把投影运算尽量移到叶端。
- 利用规则3~5把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影的形式。使尽可能多的选择和投影同时执行。
- 分组。双目运算和他的直系祖先为一组;双目运算后代直道叶子全是单目运算时并入改组。笛卡儿积的后代中若不是与之可以合并的自然连接的等值选择时,其后代单独分为一组。
优化实例
例:对关系代数表达式(如下)进行优化。
其中,C是课程表,S是学生表,SC是学生选课表。 在优化规则中没有对自然连接的直接优化,我们把自然连接分解为笛卡儿积和选择。
解答: 分解后的关系代数表达式
- 第一步:利用规则4分解选择运算
- 第二步:尽量下放选择运算
- 第二步(2):下放完成后:
- 第三步:尽量下放投影运算
- 第四步:尽量把选择和投影靠在一起
- 第五步:分组