叁拾玖2026-07-12 15:33

MySQL 索引与慢查询优化笔记

75 27

事故现场

一条列表查询在 200 万行的表上跑了 4 秒,EXPLAIN 一看,type 是 ALL,全表扫描。

索引失效的常见场景

  1. 对索引列使用函数或运算
  2. 隐式类型转换(字符串列用数字查询)
  3. 前导模糊查询 LIKE '%xx'
  4. 联合索引不满足最左前缀

排查三板斧

EXPLAIN SELECT ...;
SHOW INDEX FROM t;
SHOW PROFILES;

优化结果

补上联合索引 (user_id, created_at),把 SELECT * 改为按需取列,查询从 4s 降到 30ms。

经验总结

  • 索引不是越多越好,写入代价真实存在
  • 上线前对核心链路做 EXPLAIN 应该成为习惯
全文完