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

![center](./student-guide/diagram/02-Compile-01-01.png)
-------------------------------------------------------------
SQL 语句经过解析以后，生成 AST 语法树，传递给 Compile 模块，Compile 模块会做如下任务：

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

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

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

值得注意的是，物理优化这个环节需要查询表的元数据（合法性检查也需要元数据信息）和统计信息，而表的元数据和统计信息是存储在 TiDB Server 的缓存中的。