首批通过分布式安全可靠测评,为关键业务系统打造
SQL 请求执行流程
更新时间:2026-04-07 20:57:20
SQL 引擎从接受 SQL 请求到执行的典型流程如下图所示:

说明
此执行流程适用于 DML 和 SELECT 语句,其他语句(例如 DCL )没有优化器等步骤。
下表为 SQL 请求执行流程的步骤说明。
| 步骤 | 说明 |
|---|---|
| 快速参数化模块(Fast-parser) | 快速参数化模块将 SQL 中的常量转换为参数,然后使用参数化的 SQL 文本作为键值在 Plan Cache 中获取执行计划,从而达到仅参数不同的 SQL 能够共用相同计划的目的。也就是说仅使用词法分析对文本串直接参数化,获取参数化后的文本及常量参数。 |
| 执行计划缓存模块(Plan Cache) | 执行计划缓存模块会将该 SQL 第一次生成的执行计划缓存在内存中,后续的执行可以反复执行这个计划,避免了重复查询优化的过程。 |
| 词法/语法解析模块(Parser) | 在收到用户发送的 SQL 请求串后,词法/语法解析模块会将字符串分成一个个的"单词",并根据预先设定好的语法规则解析整个请求,将 SQL 请求字符串转换成带有语法结构信息的内存数据结构,称为语法树(Syntax Tree)。 |
| 语义解析模块(Resolver) | Resolver 将生成的语法树转换为带有数据库语义信息的内部数据结构。在这一过程中,Resolver 将根据数据库元信息将 SQL 请求中的 Token 翻译成对应的对象(例如库、表、列、索引等),生成的数据结构叫做 Statement Tree。 |
| 查询改写(Query Rewrite) | 查询改写是指将一个 SQL 改写成另外一个更加容易优化的 SQL。分析用户 SQL 的语义,并根据内部的规则或代价模型,将用户 SQL 改写为与之等价的其他形式,并将其提供给后续的优化器做进一步的优化。查询改写的工作方式是在原语法树做等价变换,变换的结果仍然是一棵语法树。 |
| 优化器(Optimizer) | 优化器是整个 SQL 请求优化的核心,其作用是为 SQL 请求生成最佳的执行计划。在优化过程中,优化器需要综合考虑 SQL 请求的语义、对象数据特征、对象物理分布等多方面因素,解决访问路径选择、联接顺序选择、联接算法选择、分布式计划生成等多个核心问题,最终选择一个对应该 SQL 的最佳执行计划。 |
| 代码生成器(Code Generator) | 将执行计划转换为可执行的代码,但是不做任何优化选择。 |
| 执行器(Executor) | 启动 SQL 的执行过程。
|