SQL从协议层传送到Parse进行解析,Parse模块会将SQL解析为AST语法树,从而让后面模块更容易读取识别;
Pre Process模块
- 针对点查进行优化
- 单表的SELECT/UPDATE/DELETE操作;
- 只搜啊秒1行或者0行,过滤条件为等值
- 返回记录条数为1行或者0行
- 优化方式较为单一,使用频率高(OLTP)
- 点查将直接跳过逻辑优化和物理优化,下推到SQL执行器;
-
构造初始的逻辑执行计划
- 常量折叠
- age > 18 + 6 => age > 25
- 表达式简化
- id is not null and id < 1000; => id < 1000;
- 子查询处理
- 将子查询转换为左连接
- 常量折叠
Logical Optimize: 逻辑优化模块
- 列裁剪
- 分析SQL,将没有使用的列剪裁掉;
- 分区裁剪
- 聚合消除
- MAX/MIN优化
- 投影消除
- 外连接消除
- 谓词下推
- 将过滤规则下推到各个存储节点,尽可能将计算下推到存储节点进行计算;
- 连接顺序调整
- 多表查询中,根据表连接条件和数量进行调整,找到最优的过滤方式;
Physical Optimize:物理优化模块
根据逻辑优化的结果,决定最终的扫描方式、索引选择和算子