索引为什么用B+树而不是B树

先给结论,B+树更适合范围查询,B+树有更低的磁盘IO,B+树有更稳定的查询性能

B+树和B树的区别

图例:

B+树

B树

1 B+树更适合范围查询

在B+树中规定,每个节点中的一个数据是其子节点数据的最后一个,那么作为节点的数据就代表的是一个个范围,例如图中<100的范围,100-200的范围,200-300的范围分开为三个区间作为子节点的范围

在需要对全表进行扫描的时候,B树需要我们对整棵树进行一次中序遍历,访问所有节点,而B+树只需要对叶子节点的链表进行一次线性遍历即可

这个过程完全不需要重新从树根开始搜索也几乎不需要回溯,效率非常高

2 B+树有更低的磁盘IO

那么什么时候我们需要磁盘IO?

答案是切换磁盘页的时候,在遍历B+树的时候我们从父节点到子节点就需要进行一次磁盘IO

我们应该知道B+树的非叶子节点里存储的只有键的信息,而B树的非叶子节点里存储的不仅有键还有数据,这就导致了一个问题,键存的更少,那么B树的层数往往很高,而层数高了就导致了我们查询需要的磁盘IO的次数就非常大,磁盘IO的次数直接决定了查询效率,这是一个很大的开销

3 B+树有更稳定的查询性能

同样的由于B树的非叶子节点不仅要存数据还要存键,B树的高度是不确定的,有时候可能一次IO就查询到就结束了,有时候可能需要访问多次直到叶子节点

而对于B+树而言每一次的磁盘IO是确定的,都需要访问到叶子节点,等于树的高度,这是很稳定的,并且,对于数据库操作来说稳定性是非常重要的,因为我们需要对操作有可预测性

总结:虽然不是所有的情况下B+树都比B树要好,但是B+树就是天生为数据库索引而生的,而设计的,它完美契合了"磁盘存储的数据库索引"这一核心设计需求

相关推荐
爱学习的小邓同学43 分钟前
数据结构 --- 二叉搜索树
数据结构·c++
2的n次方_1 小时前
openGauss压力测试:性能、稳定性与AI能力的全面探索
数据库·人工智能·压力测试
热心市民小刘05051 小时前
数据库基础知识点总结
数据库·oracle
Chloeis Syntax1 小时前
MySQL初阶学习日记(3)--- 增查改删(CRUD)
数据库·学习·mysql
g***96901 小时前
MySQL版本选择与安装
数据库·mysql
c***72741 小时前
MySQL查看日志
数据库·mysql
222you1 小时前
MybatisPlus配置多数据源
数据库
Ayanami_Reii1 小时前
基础数据结构应用-一个简单的整数问题
数据结构·算法·树状数组·fenwick tree
321茄子1 小时前
MySQL 事务隔离性及锁
java·数据库·mysql