B树与B+树

1.B树 与 B+树

B树

1.N叉搜索树。

2.每个节点上有M个key,划分出了M+1个区间。

3.进行查询的时候,就可以直接从根节点出发,判定当前要查的数据在节点上的哪个区间中,决定下一步往哪里走。

4.进行添加/删除元素可能就涉及到节点的拆分和节点的合并。

B+树

(B+树是B树的改进.针对数据库量身定做的)

1.B+树也是一个N叉搜索树.-个节点上存在N个key,划分成N个区间.

2.每个节点上N个key中,最后-一个, 就相当于当前子树的最大值.

3.父节点上的每个key都会以最大值的身份在子节点的对应区间中存在(key可能会重复出现)
叶子节点这一层 包含整个树的数据全集

4.树会使用链表这样的结构,把叶子节点串起来

此时就可以非常方便的完成数据集合的遍历,并且也很方便的从数据集合中按照范围取出一个"子集"。

2.B+树的优点(相对于B树以及哈希,红黑树)

1.N叉搜索树,树的高度有限的,降低IO的次数。

2.非常擅长范围查询

3.所有查询最终都是落入叶子节点,查询和查询之间的时间开销是稳定的。

不会出现这次特别快,下次特别慢的情况

4.由于叶子节点是全集,会把行数据只存储在叶子节点上,非叶子节点只是存储一个用来排序的key(比如存id)

数据库里是按行组织数据的,创建索引的时候,是针对这一系列进行创建~~

这一行数据,内容是比较多的,而这一个id则内容较少的,叶子节点也会非常占据空间,++非叶子节点,则占不了多少空间++。

||

缓存到内存中

(硬盘上还是要存这些非叶子节点的,但是我们进行查询的时候可以把这些非叶子节点加载到内存中,整体查询的比较过程中就可以在内存中进行了又进一步减少IO访问次数)

3.B树 与 B+树 是否稳定?

对于B树 来说,要查询的元素如果在根节点或者层次比较高的节点,就能非常快的拿到元素,但是如果要查的元素在叶子节点此时就花的时间就会更多,
不稳定的
对于B+树 来说,所有的查询都要最终到叶子上进行查询,无论查哪个元素

整体的时间开销都是差不多的

稳定的

相关推荐
努力学习的小廉7 分钟前
初识MYSQL —— 复合查询
android·数据库·mysql
NPE~1 小时前
[手写系列]Go手写db — — 第七版(实现Disk存储引擎、Docker化支持)
数据库·后端·docker·golang·教程·手写数据库
workflower1 小时前
FDD与其他方法的相似和区别
数据库·算法·需求分析·个人开发
WeiQ_4 小时前
解决phpstudy 8.x软件中php8.2.9没有redis扩展的问题
数据库·redis·缓存
DashVector8 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX9 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂9 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.10 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻10 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js