# SQL 语句的解析和编译: Compile

__*SQL 语句的编译*__

![`smart`](./student-guide/diagram/CompilingProcess_zh_002_20220509.png)
-------------------------------------------------------------
SQL 语句经过解析以后,生成 AST 语法树,传递给 Compile 模块,Compile 模块会做如下任务:

1. 合法性检查以及名字绑定。

2. 逻辑优化,主要依据关系代数的等价交换规则做一些逻辑变换。其由一系列优化规则组成。 TiDB 的逻辑优化规则,主要包括列裁剪、最大最小消除、投影消除、谓词下推,子查询去关联化,外连接消除,聚合消除等等。更详细的内容会在查询优化的章节进行介绍。

3. 物理优化,基于逻辑优化结果,会考虑数据的分布,决定如何选择物理算子。选择最优执行路径,这个选择过程取决于统计信息。TiDB 的物理优化规则,主要通过对查询的数据读取、表连接方式、表连接顺序、排序等技术进行优化。更详细的内容会在查询优化的章节进行介绍。

4. 经过前面几个步骤,最终产生执行计划。
值得注意的是,物理优化这个环节需要查询表的元数据（合法性检查也需要元数据信息）和统计信息,而表的元数据和统计信息是存储在 TiDB server 的缓存中的。