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 的次数更多。
相关推荐
2401_874732536 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
stuartevil7 小时前
【MySQL】SQL菜鸟教程(一)
sql·mysql·oracle
Chengbei117 小时前
Redis 图形化综合检测工具:redis_tools_GUI,一键探测 + 利用
数据库·redis·web安全·网络安全·缓存·系统安全
hutengyi7 小时前
PostgreSQL的备份方式
数据库·postgresql
流星白龙7 小时前
【MySQL】7.MySQL基本查询(2)
android·mysql·adb
mldlds7 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
Chengbei118 小时前
若依全漏洞复现:从 SQL 注入到 RCE 一站式实战 复现、利用与防御
数据库·sql·安全·web安全·网络安全·系统安全·安全架构
小江的记录本8 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
数据皮皮侠9 小时前
中国城市间地理距离矩阵(2024)
大数据·数据库·人工智能·算法·制造