跳到主要内容

一条 SQL 的执行全流程

📺 配套视频

📝 知识点总结

SQL 执行流程

客户端 → 连接器 → 查询缓存(8.0已移除) → 解析器 → 优化器 → 执行器 → 存储引擎
阶段职责
连接器身份认证、权限校验、连接管理
解析器词法分析 + 语法分析,生成语法树
优化器选择索引、决定 JOIN 顺序、生成执行计划
执行器调用存储引擎接口,逐行获取数据
存储引擎InnoDB 负责数据的存储和读取

EXPLAIN 关键字段

EXPLAIN SELECT * FROM orders WHERE user_id = 1001 AND status = 'paid';

重点关注:

  • typeALL 全表扫描(最差)→ ref 索引查找 → const 主键/唯一索引(最优)
  • key:实际使用的索引
  • rows:预估扫描行数
  • ExtraUsing index(覆盖索引)、Using filesort(需要额外排序)

索引失效的常见场景

  1. 对索引列使用函数:WHERE YEAR(create_time) = 2024
  2. 隐式类型转换:WHERE phone = 13800138000(phone 是 varchar)
  3. 最左前缀不匹配:联合索引 (a, b, c),查询条件只有 b = 1
  4. LIKE 左模糊:WHERE name LIKE '%张'
  5. OR 连接非索引列:WHERE a = 1 OR b = 2(b 无索引)

🔗 延伸阅读