前言
MySQL 索引优化是后端工程师的核心技能。本文通过实战案例拆解常见优化点。
一、EXPLAIN 详解
关键指标:
- type:访问类型,理想值 ref / range
- key:实际使用的索引
- rows:预估扫描行数
- Extra:Using index 表示覆盖索引,Using filesort 表示额外排序
二、索引失效的常见场景
1. 函数操作:WHERE YEAR(created_at) = 2026 → 用范围查询代替
2. 类型转换:字符串字段用数字查询
3. LIKE 'xxx%' 可以用索引,LIKE '%xxx' 不行
4. OR 两边都必须有索引
三、覆盖索引
查询字段都在索引中,避免回表:
SELECT id, name FROM users WHERE status = 1;
-- 索引 (status, name, id) 即可覆盖
四、索引下推(ICP)
MySQL 5.6+ 的特性,将 where 条件下推到存储引擎层过滤,减少回表次数。
五、慢查询治理流程
1. 开启 slow_query_log
2. 用 pt-query-digest 分析
3. 优先优化 top 10 慢查询
4. 建立索引前先 EXPLAIN 验证
六、复合索引顺序
遵循"最左前缀"原则。等值查询在前,范围查询在后。
总结
索引优化不是盲目加索引,而是理解查询模式后精准设计。EXPLAIN 是你的好伙伴。