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 的次数更多。
相关推荐
APItesterCris34 分钟前
构建弹性数据管道:利用淘宝商品 API 进行流式数据采集与处理
linux·数据库·windows
九河云40 分钟前
TOS + 数字孪生:集装箱码头的智能进化密码
大数据·服务器·网络·数据库·数字化转型
手握风云-1 小时前
MySQL数据库精研之旅第十九期:存储过程,数据处理的全能工具箱(二)
数据库·mysql
孟意昶1 小时前
Doris专题17- 数据导入-文件格式
大数据·数据库·分布式·sql·doris
你可以永远相信功夫熊猫1 小时前
金蝶云·星瀚 | 生产制造成本核算终极实操手册(从0到1,含两套完整案例)
数据库·erp
Thepatterraining1 小时前
MySQL零基础教程:DDL/DCL/DML详解,从建库到存储过程一篇搞定!
数据库·sql·mysql
想ai抽2 小时前
深入starrocks-怎样实现多列联合统计信息
java·数据库·数据仓库
jackletter2 小时前
待补充 五大关系数据库(sqlserver、mysql、oracle、pgsql、sqlite)的列类型:目录
mysql·oracle·sqlserver·sqlite·pgsql·列类型
Y4090012 小时前
MySQL中的“事务”
数据库·mysql
Raymond运维2 小时前
MySQL源码编译安装
linux·数据库·mysql