索引是数据库管理系统中一个至关重要的概念,它的本质是一种有序的数据结构,通过预先组织数据来避免全表扫描,从而大幅提升数据检索速度。你可以把它理解为书籍的目录:想找一个知识点,通过目录直接定位到页码,远比一页页翻书要快。
🎯 一、索引的本质:以空间换时间
索引的核心思想是用空间换时间,它具备两个关键属性:
🌲 二、MySQL 索引的物理存储基础
MySQL 中最核心的存储引擎是 InnoDB,它使用 B+树 作为索引的物理结构。
1. InnoDB 中 B+ 树的特性
- 多路平衡树:B+树是一种多叉平衡树,所有叶子节点都在同一层,查询路径长度相同,性能稳定。
- 节点大小与磁盘 I/O 对齐:InnoDB 默认页大小为 16KB,B+树的节点大小被设计为正好填满一个数据页。每次磁盘 I/O 至少读取一页,B+树的层高通常在 2~4 层,意味着一次查询仅需 2~4 次 I/O。
- 叶子节点构成有序双向链表:叶子节点之间通过指针双向连接,形成一个有序链表。这使得基于索引的范围查询(如 BETWEEN、>、<)非常高效,只需找到起始点,然后顺着链表依次向后扫描即可。
2. B+ 树中存储了什么?—— 聚簇索引与二级索引
InnoDB 的索引分为两大类,它们的本质区别在于叶子节点存储的内容不同:
| 聚簇索引 (Clustered Index) | 整行数据 (所有列的值) | 1. 每张表有且仅有一个,默认基于主键创建。2. 主键查找最快,因为找到叶子节点即获得全部数据。 |
| 二级索引 (Secondary Index) | 主键值 (以及索引键值) | 1. 通过二级索引查找,需要分两 |



