叶子节点与叶子页
在 InnoDB 的聚簇索引中,叶子“页”和叶子“节点”本质上是同一物理存储单元的逻辑与物理视角的表述,但两者在概念层次上有细微差异:
1. 叶子节点:逻辑结构视角
- 叶子节点是 B+ 树数据结构中的逻辑概念,表示索引树的最底层单元,直接存储完整的行数据(包含主键值、事务 ID、回滚指针和其他所有列的数据)。
- 每个叶子节点通过双向链表连接,支持范围查询的高效遍历。
2. 叶子页:物理存储视角
- 叶子页是 InnoDB 存储引擎管理数据的最小物理单元,对应磁盘上的一个固定大小(默认 16KB)的数据块。在聚簇索引中,每个叶子节点对应一个叶子页,即逻辑上的叶子节点在物理上表现为一个页。
- 页内数据按主键顺序紧凑存储,保证物理顺序与逻辑顺序一致。
3. 两者的关系
- 一一对应:每个叶子节点对应一个叶子页,两者是同一数据载体的不同抽象层次描述。例如,当提到“叶子节点存储数据行”时,实际是指这些数据行被组织在叶子页中。
- 功能差异:
- 叶子节点强调 B+ 树的逻辑结构,关注数据关联性(如双向链表关系)。
- 叶子页关注物理存储细节(如页分裂、空间利用率等),例如插入新数据时若页已满,会触发页分裂操作。
总结
在 InnoDB 的实现中,叶子节点和叶子页指向同一实体,但前者属于逻辑结构术语,后者属于物理存储术语。这种设计使得聚簇索引既能利用 B+ 树的高效查询特性,又能通过页管理机制优化磁盘 I/O 性能。