Skip to content

查询优化

复习提纲

1、查询处理器的工作过程

2、关系代数与SQL之间的关系

3、中间结果大小估计*

4、I/O代价的影响因素

查询流程

image.png

SQL查询 <=> 关系代数表达式(逻辑查询计划)

逻辑查询计划树

  • 叶结点 = 关系
  • 非叶结点 = 关系运算符

image.png

查询重写——重写逻辑查询计划

基于关系代数转换规则:自然连接、并、交、笛卡尔积交换律和结合律

image.png

image.png

转换的目的

image.png

中间代价估计(*)

image.png

选择操作的估计

image.png

image.png

连接操作的估计

case1:两个关系无公共属性,代价 = 笛卡尔积

case2:有一个公共属性

  • T~值集的包含
  • V~值集的保持

image.png

I/O代价估计

影响查询计划I/O代价的因素

  • 实现查询计划的逻辑操作符
    • 在选择逻辑查询计划时已确定
  • 中间结果的大小
  • 实现逻辑操作符的物理操作符
    • 例如,连接操作是用索引连接还是散列连接?
  • 相似操作的顺序
    • 例如,多关系的连接顺序
  • 物理操作符之间的参数传递方式
    • Pipeline(流水线)还是Materization(物化)?

物理操作符之间的参数传递

物化方式

  • 操作依次执行,并且每个操作的结果(中间关系)都写到磁盘上供其它操作存取
  • 通过磁盘物理进行数据传递
  • 节省主存空间

流水线

  • 多个操作同时执行,一个操作产生的元组直接通过共 享内存传递给其它操作
  • 节省I/O
  • 但占用主存,若缓冲区出现“颠簸”则I/O增加

乱七八糟

执行计划的缓存和重用

  • 在 MS SQL Server 中执行任何 SQL 语句 时,关系引擎将首先查看缓存中是否有用于 同一 SQL 语句的现有执行计划。MS SQL Server 重新使用所找到的任何现有计划以 节省重新编译 SQL 语句的开销。
  • 如果没有现有执行计划,则 MS SQL Server 将为查询生成新的执行计划。

Released under the GNU General Public License v3.0.