SQL执行过程
SQL优化器是一个非常复杂的操作,在前期过程中,基于静态条件进行优化,比较基于关系代数的等价转换,谓词合并,谓词下推,投影下推,谓词忽略,查询数据库catalog中的元信息(约束,外键,索引等)来辅助sql进行优化(比如确定字段是否为null,从而忽略查询条件中 filedName is null这种不可能成立的判断),但是并非每一种数据库都会采用相同或优化策略。在静态优化的过程中不需要依赖数据库中具体的数据元组,获取表中的数据规模,就能够做非常多的优化。
启发式/静态规则
重写查询以删除愚蠢/低效的东西。这些技术可能需要检查目录,但它们不需要检查数据。
基于关系代数
谓词下推
投影下推
其他例子
关系代数等价
基于成本模型估算
成本估算指标
选择率与性能
分析与直方图
基于样本分析
查询优化
单一关系查询计划
多关系查询计划
嵌套子查询
成本核算与动态规划
候选执行计划
遗传查询算法
当Join的表过多的时候的其他查找算法
参考资料
关系代数是 Calcite 的核心。每个查询都表示为关系运算符树。您可以从 SQL 转换为关系代数,也可以直接构建树。
- PingCAP