查询优化之代数优化

关系代数表达式等价变换规则

代数优化策略:通过对关系代数表达式的等价变换来提高查询效率
关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
两个关系表达式E1和E2是等价的,可记为E1≡E2

常用的等价变换规则:

1.连接、笛卡尔积交换律
设E1和E2是关系代数表达式,F是连接运算的条件,则有
在这里插入图片描述

2.连接、笛卡尔积的结合律

设E1,E2,E3是关系代数表达式,F1和F2是连接运算的条件
在这里插入图片描述
3.投影的串接定律
在这里插入图片描述
E是关系代数表达式
Ai(i=1,2,…,n),Bj(j=1,2,…,m)是属性名
{A1,A2,…,An}构成{B1,B2,…,Bm}的子集
4.选择的串接定律
在这里插入图片描述

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

选择条件F只涉及属性A1,…,An。
若F中有不属于A1,…,An的属性B1,…,Bm有更一般规则:
在这里插入图片描述

6. 选择与笛卡尔积的交换律
如果F中涉及的属性都是E1中的属性,则
σF(E1×E2)≡σF(E1)×E2
如果F=F1∧F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出:
在这里插入图片描述

若F1只涉及E1中的属性,F2涉及E1和E2两者的属性,则仍有
在这里插入图片描述

它使部分选择在笛卡尔积前先做。
7. 选择与并的分配律
设E=E1∪E2,E1,E2有相同的属性名,则
σF(E1∪E2)≡σF(E1)∪σF(E2)
8. 选择与差运算的分配律
若E1与E2有相同的属性名,则
σF(E1-E2)≡σF(E1)-σF(E2)
9. 选择对自然连接的分配律

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

11. 投影与并的分配律
设E1和E2有相同的属性名,则
在这里插入图片描述

查询树的启发式优化

典型的启发式规则

(1) 选择运算应尽可能先做
在优化策略中这是最重要、最基本的一条。
(2)把投影运算和选择运算同时进行
如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。
(3) 把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。
(4) 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间。
(5) 找出公共子表达式
如果这种重复出现的子表达式的结果不是很大的关系
并且从外存中读入这个关系比计算该子表达式的时间少得多
则先计算一次公共子表达式并把结果写入中间文件是合算的。
当查询的是视图时,定义视图的表达式就是公共子表达式的情况
遵循这些启发式规则,应用9.3.1的等价变换公式来优化关系表达式的算法。
算法:关系表达式的优化
输入:一个关系表达式的查询树
输出:优化的查询树
方法:
(1)利用等价变换规则4把形如σF1∧F2∧…∧Fn(E)变换为 σF1(σF2(…(σFn(E))…))。
(2)对每一个选择,利用等价变换规则4~9尽可能把它移到树的叶端。
(3)对每一个投影利用等价变换规则3,5,10,11中的一般形式尽可能把它移向树的叶端。
注意:
等价变换规则3使一些投影消失或使一些投影出现
规则5把一个投影分裂为两个,其中一个有可能被移向树的叶端
(4)利用等价变换规则3~5,把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影,使多个选择或投影能同时执行,或在一次扫描中全部完成
(5)把上述得到的语法树的内节点分组。
每一双目运算和它所有的直接祖先为一组(这些直接祖先是(σ,π运算)。
如果其后代直到叶子全是单目运算,则也将它们并入该组
但当双目运算是笛卡尔积(×),而且后面不是与它组成等值连接的选择时,则不能把选择与这个双目运算组成同一组

[例9.4]下面给出[例9.3]中 SQL语句的代数优化示例

(1)把SQL语句转换成查询树,如下图所示
在这里插入图片描述

为了使用关系代数表达式的优化法,假设内部表示是关系代数语法树,则上面的查询树如图9.4所示
在这里插入图片描述

(2 )对查询树进行优化
利用规则4、6把选择σSC.Cno=‘2’移到叶端,图9.4查询树便转换成下图优化的查询树。这就是9.2.2节中Q3的查询树表示。
在这里插入图片描述
欢迎大家加我微信交流讨论(请备注csdn上添加)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程子的小段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值