关系代数表达式优化步骤
本篇主要讲解怎么画查询语法树并对其优化,因为我在学关系代数的语法树的时候,在网上找不到比较详细的教法或者技巧,最后通过答案反推原理,所以想写一篇技巧来描述一下这类题的解题方法。
先上书内讲解
1、构造查询树
第一步:把用高级语言定义的查询转换为关系代数表达式
★ 以 SELECT子向对应投影操作,以FROM字向对应笛卡尔积以 WHERE子句对应选择操作,生成原始查询树
★ SQL语句转化为原始查询树
第二步:把关系代数表达式转换为查询树。
注: 查询树是一种表示关系代数表达式的树形结构。在一个查询树中,叶子结点表示关系,内结点表示关系代数操作。查询树以自底向上的方式执行:当一个内结点的操作分量可用时,这个内结点所表示的操作启动执行,执行结束后用结果关系代替这个内结点。
2、利用等价转换规则反复地对查询表达式进行尝试性转换,将原始的语法树转換成“优化”的形式(方式的等价变换规则查书)
- 对每一个选择,利用等价变换规则4~9尽可能把它移到树的叶端。目的是使选择操作尽早执行
- 对每一个投影利用等价变换规则3,9等的一般形式尽可能把它移向树的叶端。目的是使投影操作尽早执行
- 对每个叶节点加必要的投影操作,以消除对查询无用的属性。
- 如果笛卡尔乘积后还须按连接条件进行选择操作,可将两者组合成连接操作
选择下沉,投影随后
题目举例
对学生-课程数据库,查询信息系学生选修了的所有课程名称。
SELECT