SQL执行过程

SQL优化器是一个非常复杂的操作,在前期过程中,基于静态条件进行优化,比较基于关系代数的等价转换,谓词合并,谓词下推,投影下推,谓词忽略,查询数据库catalog中的元信息(约束,外键,索引等)来辅助sql进行优化(比如确定字段是否为null,从而忽略查询条件中 filedName is null这种不可能成立的判断),但是并非每一种数据库都会采用相同或优化策略。在静态优化的过程中不需要依赖数据库中具体的数据元组,获取表中的数据规模,就能够做非常多的优化。

商业数据库一般比开源数据库在优化器方面做的要更好。
image.png

启发式/静态规则

重写查询以删除愚蠢/低效的东西。这些技术可能需要检查目录,但它们不需要检查数据。

基于关系代数

谓词下推

image.png
image.png
image.png

投影下推

image.png

其他例子

image.png
image.png

关系代数等价

image.png
image.png

基于成本模型估算

使用一个模型来估计执行一个计划的成本。选择成本最低的那个。

成本估算指标

image.png

选择率与性能

image.png
image.png
image.png
image.png

分析与直方图

image.png
image.png
image.png

基于样本分析

image.png

查询优化

单一关系查询计划

image.png

image.png

多关系查询计划

image.png

image.png
image.png

嵌套子查询

image.png

image.png
image.png
image.png
image.png
image.png

成本核算与动态规划

image.png

image.png

image.png
image.png
image.png

候选执行计划

image.png
image.png
image.png
image.png

遗传查询算法

当Join的表过多的时候的其他查找算法
image.png

参考资料

关系代数是 Calcite 的核心。每个查询都表示为关系运算符树。您可以从 SQL 转换为关系代数,也可以直接构建树。

  • PingCAP

SQL Optimization Process