Query Processing and Optimization
查询语句处理与优化
Last updated on
处理流程
- Parser and translator generates relational algebra expression
- Optimizer 结合数据特点进行优化,给出 execution plan
- Evaluation engine 运行事物并给出输出
查询性能度量
目标:优化查询时间,目标分解:
- 磁盘访问
- CPU 执行
- 甚至是网络连接
其中最首要的开销是磁盘访问时间,同时这个也容易测量。
- seek 数量
- blocks read 数
- blocks written 数
查询优化
Cost-based Optimization
- 使用等价规则生成逻辑等价的表达式
- 生成所有逻辑等价的表达式
- 从所有等价的表达式中选择开销最小的执行
Heuristic Optimization
启发式的优化,遵循以下这几个规则
- 尽早进行选择操作(减少要操作的原组数量)
- 尽早进行投影操作(减少要操作的原组中的属性)
- 在多个操作(如连接操作)可按任意顺序先后执行时选择最严格的 (即输出结果数量最小的)先执行
- 笛卡尔乘积和选择组合成连接操作
- 投影和相邻的操作结合,减少为链投影而进行单独的 I/O 操作
- 存储公共的常用的结果
有些系统只使用启发式优化,有些则结合启发式优化和 cost-based 优化。
启发式优化的前提
- 选择串接律:多个选择同时进行和先后进行结果一致
- 选择交换律:多个先后执行的选择调换顺序结果一致
- 投影串接律:多个投影操作调换顺序执行结果一致
Expression Tree
叶节点是关系,非叶节点是各种关系代数操作。