SQL 查询执行流程
SQL 执行通常会经过解析、重写、优化和执行阶段,理解这条链路是分析慢查询和执行计划的基础。
#type / concept
#status / growing
#tech / dev / backend
#resource / database
#resource / sql
[!info] related notes
- 所属 MOC: 数据库 MOC
- 前置概念: SQL, 数据库索引
- 并列概念:
- 易混淆概念:
- 关系笔记: 用 EXPLAIN 分析 MySQL 和 PostgreSQL 查询计划
SQL 查询执行流程
一句话定义
一条 SQL 从文本到结果,通常要经历解析、重写、优化和执行几个主要阶段。
核心机制 / 工作原理
典型流程可以简化为:
- 解析:检查语法是否合法
- 语义分析:确认表、列、函数是否存在
- 重写:把视图、规则或某些语法糖改写成内部表示
- 优化:枚举可能计划,选择代价更低的一种
- 执行:按计划读取数据、过滤、连接、排序并返回结果
真正影响性能的关键点常在优化和执行阶段。
最小例子 / 最小场景
对于:
SELECT id, name
FROM users
WHERE email = 'alice@example.com';
数据库会考虑:
users.email上是否有索引- 预计命中多少行
- 全表扫描还是索引扫描更便宜
边界与易混淆点
- 数据库不是按你写 SQL 的顺序机械执行,它会重排和优化。
- 语法正确不代表计划高效;很多性能问题是“能跑,但代价非常大”。
- 执行计划是成本估计结果,不是绝对真理,所以需要结合真实执行结果来看。