为什么 MySQL 选择使用 B+ 树作为索引结构?

March 12, 2025 / 老大 / 3阅读 / 0评论/ 分类: 数据库

主要是数据结构方面的分析

查询性能高

B+tree是一种平衡树,每个叶子节点到根节点的路径长度相同,其在插入和删除时会进行分裂合并,以维持树的平衡,会有一定的冗余节点,使得删除时数的结构变化小,更高效。(自平衡也是会有性能损耗的);

查找、插入、删除等操作的时间复杂度为 O(log n)

数的高度增长不会过快,查询磁盘的I/O次数减少

B+tree是一种多叉树,非叶子节点仅保存主键或索引值和页面指针,这样每一页能够容纳更多的记录,内存中就可以存放更多索引,容易命中缓存,使得查询磁盘的I/O次数减少。

减少树的高度,提高检索效率;

范围查询能力强

叶子节点使用双向链表链接,从跟节点定位到叶子结点,查找到范围的起点后,只需要顺序扫描链表即可遍历后续数据,十分高效。

B树和B+树的区别

  • B树每个节点存放了完整的数据,而B+树非叶子节点仅存储key和指针,完整数据存放在叶子节点。这使得B+树可以在内存中存放更多的索引页,减少磁盘的查询次数;

  • B+树叶子节点组成了链表,便于区间扫描,而B树只能每一层遍历查找;

  • B+树查询时间更平均、稳定,都需要从跟节点扫描到叶子节点。而B树在非叶子节点就可能找到数据返回。

#MySQL(21)

评论