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 的次数更多。
相关推荐
杨云龙UP4 小时前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
墨染天姬6 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
古月-一个C++方向的小白6 小时前
MySQL数据库——数据类型
android·数据库·mysql
qq_413502027 小时前
如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL
jvm·数据库·python
逸Y 仙X7 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
m0_738120727 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全
yexuhgu7 小时前
CSS如何利用-checked实现纯CSS手风琴折叠_通过状态选择器控制区域高度
jvm·数据库·python
2301_779622418 小时前
mysql如何通过主从备份实现读写分离_配置mysql架构模式
jvm·数据库·python
m0_741173338 小时前
HTML5中WebSocket在弱网环境下的延迟抖动算法补偿
jvm·数据库·python