327 字
2 分钟
MySQL 索引类型与 B+ 树:结构、分类和失效场景
索引的几种分类
- 按数据结构:B+Tree、Hash、全文索引。
- 按字段特性:主键、唯一、普通、前缀索引。
- 按字段个数:单列索引、联合索引。
- 按物理存储:聚簇索引、非聚簇(二级)索引。
为什么 InnoDB 使用 B+ 树
B+ 树的非叶子节点只存索引,叶子节点存数据或索引字段和主键值;叶子节点通过链表连接,范围查询效率高。相比二叉树和红黑树,B+ 树一个节点能容纳更多 key,树高度更低,磁盘 I/O 更少;相比 B 树,非叶子节点不存数据,能容纳更多索引项。
索引不一定总有效
常见失效原因包括:不满足最左前缀、对索引列做函数或计算、LIKE '%张' 左模糊、发生隐式类型转换,以及 OR 两侧无法都利用索引。索引也不是越多越好:它会占用空间,并增加增删改时的维护成本。
联合索引
联合索引本质上仍是一棵 B+ 树,先比较第一个字段,再比较后续字段,因此需要遵循最左前缀原则。设计时优先放高频、区分度高的条件,范围查询列尽量靠后,并兼顾排序需求。
MySQL 索引类型与 B+ 树:结构、分类和失效场景
https://blog.xqcherry.top/posts/interview/mysql/index-types-and-btree/ 目录