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+树 来说,所有的查询都要最终到叶子上进行查询,无论查哪个元素

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

稳定的

相关推荐
白鹭17 分钟前
MySQL源码部署(rhel7)
数据库·mysql
666和7771 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 小时前
SpringMVC(一)
数据库
星期天要睡觉2 小时前
MySQL 综合练习
数据库·mysql
Y4090012 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook3 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月3 小时前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql
酷ku的森3 小时前
Redis中的hash数据类型
数据库·redis·哈希算法