查询优化

优化一方面在关系代数级别发生
一方面在实现策略上

概述

考虑下面查询
找出Music系的所有教师名字及每个教师所教授课程名称的关系表达式
π_{name, title}(σ_{dept_name = "Music"}(instructor⋈(teches⋈π_{course_id, title}(course))))
另一种表达
π_{name, title}((σ_{dept_name = "Music"}(instructor)) ⋈ (teaches ⋈ π_{course_id, title}(course)))

查询优化_第1张图片

一个执行计划确切地定义了每个运算应使用的算法
及运算间的协调

查询优化_第2张图片

给定一个关系代数表达式
查询优化器的任务是产生一个查询执行计划
该计划能获得与原关系表达式相同的结果,且执行代价优秀

查询执行计划的产生有三步
- 产生逻辑上与给定表达式等价的表达式
- 对所产生的表达式以不同的方式作注释
,产生不同的查询计划
- 估计每个执行计划的代价,
选择估计代价最小的一个

等价规则说明了如何将一个表达式转换成逻辑上等价的另一个表达式

关系表达式的转换

一个查询可表示成多种不同形式,每种形式有不同的执行代价
如两个关系表达式在每一个有效数据库实例中都会产生相同的元组集
称它们是等价的

在SQL语言中,
输入和输出都是元组的多重集合
关系代数的多重集合版本用于评估SQL查询

若对任意有效的数据库,两个表达式产生相同的元组多重集合,
则称多重集合版本的这两个关系代数表达式是等价的

等价规则

指出两种不同形式的表达式是等价的
可用第二种形式的表达式代替第一种
可用第一种形式的表达式代替第二种
优化器利用等价规则将表达式转换成逻辑上等价的其他表达式

下面列出关系代数表达式的一些通用等价规则
用θ,θ_{1},θ_{2}等表示谓词
L_{1},L_{2},L_{3}等表示属性列表
而E,E_{1},E_{2}等表示关系代数表达式
关系名r是关系代数表达式的特例
在E出现的任何地方它都可以出现

查询优化_第3张图片

- 合取选择运算可分解为单个选择运算的序列
σ_{θ_{1}∧θ_{2}}(E) = σ_{θ_{1}}(σ_{θ_{2}}(E))
- 选择运算满足交换律
σ_{θ_{1}}(σ_{θ_{2}}(E)) = σ_{θ_{2}}(σ_{θ_{1}}(E))
- 一系列投影运算中只有最后一个运算是必需的,其余的可省略
π_{L_{1}}(π_{L_{2}}(...(π_{L_{n}}(E))...))=π_{L_{1}}(E)
- 选择操作可与笛卡尔积及θ连接相结合
a.σ_{θ}(E_{1} * E_{2})  = E_{1} ⋈_{θ} E_{2}
b.σ_{θ1}(E_{1} ⋈_{θ2} E_{2}) = E_{1} ⋈_{θ1∧θ2}E_{2}
- θ连接运算满足交换律
E_{1} ⋈_{θ} E_{2} = E_{2} ⋈_{θ} E_{1}

- 
a.自然连接运算满足结合律
(E_{1} ⋈ E_{2}) ⋈ E_{3} = E_{1} ⋈ (E_{2} ⋈ E_{3})
b.θ连接具有以下方式的结合律
(E_{1} ⋈_{θ1} E_{2}) ⋈_{θ2∧θ3} E_{3} = E_{1} ⋈_{θ1∧θ3} (E_{2} ⋈_{θ2} E_{3})
其中θ2只涉及E_{2}和E_{3}的属性
由于其中任意一个条件都可为空,
故笛卡尔积运算也满足结合女
连接运算满足结合律,交换律在查询优化中对重排连接顺序很重要
- 选择运算在下面两个条件下对θ连接具有分配律
a.当选择条件θ_{0}中的所有属性只涉及参与连接运算的表达式之一时,
满足分配律:
σ_{θ0}(E_{1} ⋈_{θ} E_{2}) = (σ_{θ0}(E_{1})) ⋈_{θ} E_{2}
b.当选择条件θ1只涉及E_{1}的属性
选择条件θ2只涉及E_{2}的属性时,满足分配律
σ_{θ1∧θ2}(E_{1} ⋈_{θ} E_{2}) = (σ_{θ1}(E_{1})) ⋈_{θ} (σ_{θ2}(E_{2}))
- 投影运算在下面条件下对θ连接运算具有分配律
...

转换的例子

若一组等价规则中任意一条规则都不能由其他规则联合起来导出,
称这组等价规则集是最小的

连接的次序

等价表达式的枚举

查询优化器使用等价规则系统地产生与给定表达式等价的表达式

表达式结果集统计大小的估计

你可能感兴趣的:(查询优化)