MySQL:索引原理与查询优化
从 B+ 树结构讲清聚簇/非聚簇索引、回表与覆盖索引,再到最左前缀、索引失效与慢 SQL 排查。
本节你将能
解释为什么 MySQL 用 B+ 树,说清回表与覆盖索引,并能针对慢 SQL 给出优化思路。
核心要点
- B+ 树非叶子只存 key、叶子链表相连,范围查询与全表扫描高效;聚簇索引叶子即数据行。
- 二级索引叶子存主键,需回表;覆盖索引(查询列都在索引中)可避免回表。
- 最左前缀:联合索引 (a,b,c) 必须从 a 开始连续匹配;函数/隐式转换/前导 % 会导致失效。
- 排查:慢查询日志 + EXPLAIN(type/key/rows/Extra),关注 Using filesort/temporary。
面试连招
追问:为什么阿里规范建议软删除用标记而非 DELETE?大表如何优化(分库分表/读写分离)?