MySQL 索引原理详解
时间:2026-10-4 10:36 作者:emer 分类: 无
MySQL 索引为什么能提速
索引是数据库性能优化的核心,搞懂原理才能用对。
1. 为什么慢查询慢
没有索引,MySQL 就得全表扫描,一行一行找。100万行数据就得扫100万次,当然慢。
有了索引,就像书有目录,直接定位到位置,查几百万行也很快。
2. B+ 树索引
MySQL InnoDB 默认用 B+ 树做索引。
- 树的高度低,一般3-4层
- 一次查询只需3-4次磁盘IO
- 叶子节点存数据,非叶子节点存索引
3. 聚簇索引 vs 二级索引
聚簇索引:数据和索引放在一起,按主键组织。一张表只有一个聚簇索引。
二级索引:索引和数据分开,叶子节点存主键值。查二级索引需要回表查主键。
4. 覆盖索引
如果查询的字段都在索引里,就不用回表了,叫覆盖索引。
-- name有索引
SELECT name FROM users WHERE name = '张三';
-- 覆盖索引,不用回表
5. 最左前缀
联合索引 (a, b, c),必须从最左列开始用:
WHERE a = 1能用WHERE a = 1 AND b = 2能用WHERE b = 2用不了
6. 索引失效场景
- 索引字段做函数运算
- 隐式类型转换
- like 以 % 开头
- 联合索引不满足最左前缀
总结
索引是空间换时间。不是越多越好,太多索引会影响写入性能,占用额外存储空间。