l 代数优化策略:通过对关系代数表达式的等价变换来提高查询效率
l 关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
l 两个关系表达式E1和E2是等价的,可记为E1≡E2
l 常用的等价变换规则:
l 1.连接、笛卡尔积交换律
l 设E1和E2是关系代数表达式,F是连接运算的条件,则有

l 2.连接、笛卡尔积的结合律
l 设E1,E2,E3是关系代数表达式,F1和F2是连接运算的条件

l 3.投影的串接定律

l E是关系代数表达式
l Ai(i=1,2,…,n),Bj(j=1,2,…,m)是属性名
l {A1,A2,…,An}构成{B1,B2,…,Bm}的子集
l 4.选择的串接定律

l E是关系代数表达式,F1、F2是选择条件
l 选择的串接律说明选择条件可以合并,这样一次就可检查全部条件
l 5.选择与投影操作的交换律

l 选择条件F只涉及属性A1,…,An。
l 若F中有不属于A1,…,An的属性B1,…,Bm有更一般规则:

l 6. 选择与笛卡尔积的交换律
l 如果F中涉及的属性都是E1中的属性,则

l 如果F=F1∧F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出:
l 若F1只涉及E1中的属性,F2涉及E1和E2两者的属性,则仍有
它使部分选择在笛卡尔积前先做。
7. 选择与并的分配律
设E=E1∪E2,E1,E2有相同的属性名,则
8. 选择与差运算的分配律
若E1与E2有相同的属性名,则

9. 选择对自然连接的分配律

F只涉及E1与E2的公共属性
10. 投影与笛卡尔积的分配律
设E1和E2是两个关系表达式,A1,…,An是E1的属性,
B1,…,Bm是E2的属性,则

11. 投影与并的分配律
设E1和E2有相同的属性名,则

l 典型的启发式规则
l (1)选择运算应尽可能先做
l 在优化策略中这是最重要、最基本的一条。
l (2)把投影运算和选择运算同时进行
l 如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。
l (3) 把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。
l (4) 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间。
l (5) 找出公共子表达式
l 如果这种重复出现的子表达式的结果不是很大的关系
l 并且从外存中读入这个关系比计算该子表达式的时间少得多
l 则先计算一次公共子表达式并把结果写入中间文件是合算的。
l 当查询的是视图时,定义视图的表达式就是公共子表达式的情况
l 遵循这些启发式规则,应用9.3.1的等价变换公式来优化关系表达式的算法。
l 算法:关系表达式的优化
l 输入:一个关系表达式的查询树
l 输出:优化的查询树
l 方法:
l (1)利用等价变换规则4把形如
变换为
l (2)对每一个选择,利用等价变换规则4~9尽可能把它
l 移到树的叶端。

规则4: 合并或分解选择运算
规则5-9: 选择运算与其他运算交换
l (3)对每一个投影利用等价变换规则3,5,10,11中的一般形式尽可能把它移向树的叶端。
l 注意:
l 等价变换规则3使一些投影消失或使一些投影出现
l 规则5把一个投影分裂为两个,其中一个有可能被移向树的叶端
l (4)利用等价变换规则3~5,把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影,使多个选择或投影能同时执行,或在一次扫描中全部完成
规则3: 合并或分解投影运算
规则5,10,11:投影运算与其他运算交换
规则3:合并或分解投影运算
规则4:合并或分解选择运算
规则5:投影运算与选择运算交换
l (5)把上述得到的语法树的内节点分组。
l 每一双目运算(×,
,∪,-)和它所有的直接祖先为一组(这些直接祖先是(σ,π运算)。
l 如果其后代直到叶子全是单目运算,则也将它们并入该组
l 但当双目运算是笛卡尔积(×),而且后面不是与它组成等值连接的选择时,则不能把选择与这个双目运算组成同一组
l [例9.4]下面给出[例9.3]中 SQL语句的代数优化示例
(1)把SQL语句转换成查询树
l 为了使用关系代数表达式的优化法,假设内部表示是关系代数语法树
(2 )对查询树进行优化
利用规则4、6把选择σSC.Cno=‘2’移到叶端,图9.4查询树便转换成下图优化的查询树。