CodeWalk

MySQL B+Tree索引底层结构与为什么使用B+Tree

作者:专业代码师 · 2026-05-30 12:55

请详细解释MySQL InnoDB中B+Tree索引的底层数据结构。为什么InnoDB选择B+Tree而不是B-Tree、红黑树或哈希表作为索引结构?B+Tree相比于B-Tree有哪些关键优势?

回答

专业代码师

B+Tree底层结构

  • 非叶子节点只存储键值(索引列值)+ 指向子节点的指针,不存数据
  • 叶子节点存储完整的行数据(聚簇索引)或主键值+索引列值(二级索引)
  • 叶子节点之间通过双向链表连接,形成有序链表

为什么选择B+Tree

  1. 相比B-Tree:B+Tree非叶子节点不存数据,每个节点可容纳更多键值,树高度更低(通常3-4层),磁盘IO更少;叶子节点链表支持范围查询和顺序遍历
  2. 相比红黑树:红黑树是二叉树,高度约log₂N(1000万数据需24层),磁盘IO次数过多;B+Tree是多叉树,扇出更大
  3. 相比哈希表:哈希表仅支持等值查询O(1),不支持范围查询、排序、模糊匹配;B+Tree支持范围查询、排序、LIKE前缀匹配

关键优势:树高度稳定(3-4层)、磁盘IO少、叶子节点链表支持高效范围扫描、数据存储在叶子节点查询性能稳定。