MySQL的InnoDB存储引擎在实现索引时使用的是B+树而不是B树。

为什么使用B+树?

B+树相较于B树有一些重要特点,使其非常适合在数据库索引中使用:

  1. 所有关键字都在叶节点上:
  • B+树将所有数据存储在叶子节点,而非内部节点。内部节点只存储用来引导搜索的索引,叶节点则包含了完整的记录信息。这使得叶节点形成了一个单独的数据层,便于顺序遍历。
  1. 顺序访问更加高效:
  • B+树的叶子节点按关键字顺序链表连接,支持范围查询和顺序扫描性能非常高。对于数据库场景,顺序访问(例如范围查询 BETWEEN 或排序操作 ORDER BY)是非常常见的需求,B+树正好能很好地匹配。
  1. 层级更少,查找效率高:
  • B+树通过在同一个节点存储更多的关键字(利用页的空间),降低树的高度,从而减少磁盘 IO 操作——这对于大规模数据来说非常重要。
  1. 非叶子节点只存储索引:
  • 内部节点不存储具体的数据,仅存储索引值(关键字)和指向子节点的指针。这使得内部节点可以利用存储空间放更多的索引,提高树的分支因子,进一步降低树的高度。

在InnoDB的使用场景

在InnoDB中,B+树主要用于以下两种索引:

  1. 主键索引(Clustered Index,聚簇索引):
  • 主键的数据在数据页中以B+树组织,叶子节点直接保存行的完整记录。这种索引强制表的存储以主键顺序组织。
  1. 辅助索引(Secondary Index):
  • 辅助索引的叶子节点不存储完整的记录,而是存储主键值作为指向实际记录的”地址”。查询时通过辅助索引查找到主键,再回到聚簇索引中找到完整数据(即二次查询,称为回表操作)。

总结

因此,MySQL的InnoDB引擎使用的是B+树,主要是为了更高效地支持数据库的范围查询、顺序遍历以及减少磁盘IO,符合数据库索引的大量使用场景需求。



MySQL的InnoDB引擎使用的B树还是B+树插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://folen.top/2025/09/19/mysql-innodb-b-tree/