索引为什么用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+树就是天生为数据库索引而生的,而设计的,它完美契合了"磁盘存储的数据库索引"这一核心设计需求

相关推荐
软件聚导航2 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
学习星球2 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper3 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_962174173 小时前
Redis 简介
数据库·redis·wpf
专注仿真3 小时前
Spring AI 实现智能对话系统项目指南
数据结构·spring·机器学习
夜雪一千3 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
间歇性努力持续性发呆的野生快乐选手4 小时前
高级数据结构:树状数组
数据结构
Highcharts.js4 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表
翼龙云_cloud4 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算
进阶的小木桩5 小时前
mysql 安装问题解决方案记录
数据库·mysql