一条 SQL 的执行全流程
📺 配套视频
📝 知识点总结
SQL 执行流程
客户端 → 连接器 → 查询缓存(8.0已移除) → 解析器 → 优化器 → 执行器 → 存储引擎
| 阶段 | 职责 |
|---|---|
| 连接器 | 身份认证、权限校验、连接管理 |
| 解析器 | 词法分析 + 语法分析,生成语法树 |
| 优化器 | 选择索引、决定 JOIN 顺序、生成执行计划 |
| 执行器 | 调用存储引擎接口,逐行获取数据 |
| 存储引擎 | InnoDB 负责数据的存储和读取 |
EXPLAIN 关键字段
EXPLAIN SELECT * FROM orders WHERE user_id = 1001 AND status = 'paid';
重点关注:
- type:
ALL全表扫描(最差)→ref索引查找 →const主键/唯一索引(最优) - key:实际使用的索引
- rows:预估扫描行数
- Extra:
Using index(覆盖索引)、Using filesort(需要额外排序)
索引失效的常见场景
- 对索引列使用函数:
WHERE YEAR(create_time) = 2024 - 隐式类型转换:
WHERE phone = 13800138000(phone 是 varchar) - 最左前缀不匹配:联合索引
(a, b, c),查询条件只有b = 1 - LIKE 左模糊:
WHERE name LIKE '%张' - OR 连接非索引列:
WHERE a = 1 OR b = 2(b 无索引)
🔗 延伸阅读
- 企业级多数据源事务中间件 — 基于 Mybatis 源码二次开发