3.Compile 模块
拿到 AST 之后,就可以做各种验证(预处理、合法性验证,权限检验)、变换、优化,这一系列动作的入口在 compile,最重要的三个步骤:
- 做一些合法性检查以及名字绑定;
- 制定查询计划,并优化,这是最核心的步骤之一。这里有一个特殊的函数 TryFastPlan,如果这里判断规则可以符合 PointGet,会跳过后续的优化,直接走点查
- 构造 executor.ExecStmt 结构:这个 ExecStmt 结构持有查询计划,是后续执行的基础
监控说明:
-
位置:TiDB – Executor – Compile Duration 面板
正常情况下,” Compile Duration” 小于 30 ms
注意:Parse Duration / Compile Duration 是纯 CPU 操作,如果 CPU 负载不高,但是耗时比较长,大部分情况是 insert … values 太多,Compile 高更可能的情况是带了非关联子查询