第五章 查询处理与优化 5.1 概述 5.1.1查询处理的一般过程 5.1.2例子 问题:选修了’CS01’的学生姓名? SELECT SNAME FROM S,SC WHERE S.S# = SC.S# AND C#=’CS01’ 5.1.3查询优化 代数优化 依赖于存取路径的优化(物理优化) 规则优化 代价估算优化 5.2代数优化 5.2.1关系代数等价变换规则 (1)选择的串接. σF1(σF2(R))≡σF1∧ F2(R) (2)选择的交换 σF1(σF2(R))≡σF2(σF1(R)) (3)投影的串接. πL1(πL2(…πLn(R)…)) ≡πL1(R) 条件:L1 L2… Ln (4)选择与投影的交换. πL(σF(R))≡σF(πL(R)) F的属性是L的子集 (5)连接/笛卡儿积的交换率 RS≡SR R×S≡S×R (6)选择对连接/笛卡儿积的分配率. σF(RS) ≡ (σF(R))S Attr(F)  Attr(R) σF1∧ F2 (RS) ≡σF1(R) σF2(S) Attr(F1)  Attr(R) (7)投影对连接/笛卡儿积的分配率. πL1∪L2(RS) ≡πL1 (R) πL2 (R) Attr(L1)  Attr(R),Attr(L2)  Attr(S),Attr(F)  Attr(L1∪L2) (8)选择对∪、∩、-的分配率 σF(R∪S) ≡σF(R) ∪σF(S) (9)投影对∪的分配率. πL (R∪S) ≡πL (R) ∪πL (S) (10) 、×、∪、∩的结合率 (RS)T≡R(ST) 5.2.2查询优化的一般策略 (1)σ优先 (2)使用频率高的属性建索引 (3)连接属性索引/排序 (4)π、σ同时进行 (5)σ+×→ (6)公共子表达式 5.2.3代数优化算法 (1)生成查询语法树 (2)σ移至树叶 (3)利用规则(3)合并投影 (4)利用×、的结合率,调整×、的执行顺序 (5)将×与相关操作转换为 (6)在叶子节点添加π 5.2.4例子 5.3依赖于存取路径的规则优化 5.3.1选择操作 最初方法:顺序扫描 存取路径:索引(B+树),动态散列 启发式规则 P122 5.3.2连接操作 (1)嵌套循环法 顺序遍历,一一匹配 算法:P123 物理块少的作为外关系 (2)利用索引,散列寻找匹配元组 减少I/O次数 (3)排序归并法 按连接属性对关系排序 算法P125 (4)散列连接法 用散列函数将连接属性散列至文件中(桶Bucket) 启发式规则 P125 5.3.3投影操作 与σ、π同时进行 重复值的消除:排序,散列 算法:P126 5.3.4集合操作 ×:嵌套循环 ∪∩-:发现共同元组 5.3.5组合操作 减少临时文件,尽可能同时执行操作 其他优化方式