MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 :索引为什么使用 B+ 树,而不使用 B 树,不使用红黑树呢

首先 B 树和 B+ 树 都是多叉搜索树,然后我们先来观察一下 B+ 树和 B 树的数据结构:

B+ 树的数据结构实现 >>

B 树的数据结构实现 >>

【B+ 树相较于 B 树的优势】

1. IO 次数更少(查询效率更高)

B+ 树的非叶子节点不存放实际的数据,仅存放索引,因此数据量相同的情况下,相比既存储索引又存储数据的 B 树,B+ 树的非叶子节点可以存放更多的索引,所以 B+ 树查询时 IO 次数更少,查询效率更高。

2. 范围查询性能高

B+ 树的叶子节点使用链表相连,有利于范围查询;而 B 树想要进行范围查询时,就只能通过树的深度遍历或广度遍历来完成范围查询,这就会产生更多节点的磁盘 IO,查询效率就低了。

3. 插入和删除性能更好

B+ 树有大量的冗余节点(所有的非叶子节点都是冗余索引),这些冗余索引使得 B+ 树在进行插入和删除操作的时候,效率很高,不会像 B 树那样发生复杂的变化(不断调整节点位置)。

动图演示链接(自己体会):

那为什么不使用红黑树呢 ??

连 B 树都不用,红黑树就更不用说了。

  • 其一,它是二叉树,那么它树的高度就比 B+ 树要高;
  • 其二,它在进行插入删除的时候,需要不断的调整树的位置,保证树的平衡性,还需要保证节点的颜色符合红黑树的性质;
  • 其三,它的非叶子节点也是不仅要存储索引,还要存储数据,所以它 IO 的次数更多。
相关推荐
独隅2 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_2 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界4 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB5 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛5 小时前
MySQL的操作
数据库·mysql
猫咪很可爱5 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
小豆庄6 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程
Umi·6 小时前
MySQL库表操作
数据库·mysql
风哥2号7 小时前
数据库教程FGMT69:PostgreSQL运维诊断与监控分析
运维·数据库·postgresql
ss2737 小时前
AI时代首先数据库-PostgreSQL实战笔记 27 PostgreSQL数据写入与读取流程解析
数据库·笔记·postgresql