数据库 – 关系代数优化(语法树优化)
关系代数优化是指通过对关系代数表达式的等价变换操作来提高数据库的查询效率。
关系代数有5大基本操作:包括并( Union,U ),差 (Difference , - ),笛卡尔积( X ),投影( project,∏),选择( select , σ )。
其他操作:交(Intersection , ∩ ),连接( ⋈ ),除( ÷ );
代数优化遵循的原则是:先做选择,运用投影去除多余属性等等。
优化算法:语法树(尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)。
一,在优化过程中使用到的等价变换规则如下
1. 连接,笛卡尔积的交换律
设E1和E2是关系代数表达式,F是连接运算的条件
2. 连接,笛卡尔积的结合
3. 投影的串接定律
A1…An,B1…Bn为表的属性。
4. 选择的串接定律
5. 选择与投影的交换
6. 选择与笛卡尔积的交换
7.选择与并的交换
8.选择与差的交换
9. 投影与笛卡尔积的交换
10.投影与并的交换
二,关系代数表达式优化步骤
1、构造查询树
第一步:把用高级语言定义的查询转换为关系代数表达式
★ 以 SELECT子句对应投影操作,以FROM子句,对应笛卡尔积以 WHERE子句对应选择操作,生成原始查询树
★ SQL语句转化为原始查询树
第二步:把关系代数表达式转换为查询树。
注: 查询树是一种表示关系代数表达式的树形结构。在一个查询树中,叶子结点表示关系,内结点表示关系代数操作。查询树以自底向上的方式执行:当一个内结点的操作分量可用时,这个内结点所表示的操作启动执行,执行结束后用结果关系代替这个内结点。
2、利用等价转换规则反复地对查询表达式进行尝试性转换,将原始的语法树转換成“优化”的形式
<1> 对每一个选择,利用等价变换规则4~9尽可能把它移到树的叶端。目的是使选择操作尽早执行
<2> 对每一个投影利用等价变换规则3,9等的一般形式尽可能把它移向树的叶端。目的是使投影操作尽早执行
<3> 对每个叶节点加必要的投影操作,以消除对查询无用的属性。
<4> 如果笛卡尔乘积后还须按连接条件进行选择操作,可将两者组合成连接操作
选择下沉,投影随后
---------------------------------------------------------------------------------------------------------------------------
应用举例
从数据库中找出选修了课程名为“IS”的学生姓名
Select Cname
From Student, Course, SC
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Student.Sdept =’IS’;
1.构造查询树
查询语句转关系代数表达式为:∏Cname(σStudent.Sdept=’IS’(Student ⋈ Course ⋈ SC))
2.利用等价代换原则进行优化
(1)
(2)
(3)
优化完毕。
###数据库操作
SQL语句中EXISTS和 NOT EXISTS的用法。 解决查询选修全部课程,销售所有商品,使用所有零件类问题