查询优化
复习提纲
1、查询处理器的工作过程
2、关系代数与SQL之间的关系
3、中间结果大小估计*
4、I/O代价的影响因素
查询流程
SQL查询 <=> 关系代数表达式(逻辑查询计划)
逻辑查询计划树
- 叶结点 = 关系
- 非叶结点 = 关系运算符
查询重写——重写逻辑查询计划
基于关系代数转换规则:自然连接、并、交、笛卡尔积交换律和结合律
转换的目的
中间代价估计(*)
选择操作的估计
连接操作的估计
case1:两个关系无公共属性,代价 = 笛卡尔积
case2:有一个公共属性
- T~值集的包含
- V~值集的保持
I/O代价估计
影响查询计划I/O代价的因素
- 实现查询计划的逻辑操作符
- 在选择逻辑查询计划时已确定
- 中间结果的大小
- 实现逻辑操作符的物理操作符
- 例如,连接操作是用索引连接还是散列连接?
- 相似操作的顺序
- 例如,多关系的连接顺序
- 物理操作符之间的参数传递方式
- Pipeline(流水线)还是Materization(物化)?
物理操作符之间的参数传递
物化方式
- 操作依次执行,并且每个操作的结果(中间关系)都写到磁盘上供其它操作存取
- 通过磁盘物理进行数据传递
- 节省主存空间
流水线
- 多个操作同时执行,一个操作产生的元组直接通过共 享内存传递给其它操作
- 节省I/O
- 但占用主存,若缓冲区出现“颠簸”则I/O增加
乱七八糟
执行计划的缓存和重用
- 在 MS SQL Server 中执行任何 SQL 语句 时,关系引擎将首先查看缓存中是否有用于 同一 SQL 语句的现有执行计划。MS SQL Server 重新使用所找到的任何现有计划以 节省重新编译 SQL 语句的开销。
- 如果没有现有执行计划,则 MS SQL Server 将为查询生成新的执行计划。