# TiDB 优化器架构

![left](./student-guide/diagram/16-Optimizer-architecture-01-01.png)

-------------------------------------------------------------
TiDB 优化器架构
左面是 TiDB 的协议层，负责处理 TiDB Server 和用户的链接，从用户处收发数据。
右面是 TiDB Server 的 SQL 核心层：
- SQL 通过协议层到达 SQL 核心层，首先会被解析成一个语法树（AST）
- Pre Proces 主要针对与点查询（Point Get）的情况做了优化，如果是点查询，将跳过优化的过程，直接下推到 SQL 执行器中
- 校验之后的语法树会到逻辑优化器（Logic Optimizer），逻辑优化器会根据一些规则对 SQL 进行逻辑改写
- 经过了逻辑优化的 SQL 语法树会进行物理优化（Physical Optimizer）
- 在进行物理优化的时候，需要结合统计信息（Statistics），判断具体的算子该如何选择，最后生成一个可以被执行的物理执行计划
- 生成的物理执行计划被送到 TiDB SQL 执行器（TiDB Executor）中执行
- 与传统的集中式的数据库不同，分布式的 TiDB 需要将执行计划下推到不同的存储层 TiKV 中读写数据

总结一下，一条 SQL 在优化器中主要从三个维度进行优化
- 预处理阶段优化
- 逻辑处理阶段优化
- 物理处理阶段优化
