数据结构-B+树(简介)

B+ 树简介

B+ 树是基于 B-树的变体,比 B-树查询性能更强

什么是卫星数据

卫星数据就是索引元素指向的数据记录,就是索引指向的是数据库表中哪一行,对于 B-树来说每个结点都有卫星数据,对于 B+ 树来说只有叶子结点有卫星数据

聚集索引和非聚集索引

数据库表行中是物理顺序和键值的逻辑顺序相同,非聚集索引反之。对于聚集索引,B+ 树的叶子结点直接包含了卫星数据,对于非聚集索引,B+ 树的叶子结点带有指向卫星数据的指针

为什么 B+ 树比 B 树更优秀?

  • 更少的 IO 次数

    B+ 树的非叶子结点没有卫星数据,所以各个磁盘页理论上能存放更多的索引,换句话说就是下面规则中的 k 的值会比 B 树更大,k 本来是 B+ 树的阶数,k 是依据磁盘页的大小来定的,现在磁盘页给 B+ 树使用时可以存更多索引,那么 B+ 树相对于 B 树来讲,相同磁盘页,这个 k 的值可以取更大。在树的图形中可以表现为,B+ 树比 B 树更加矮胖

  • 性能更稳定

    B+ 树每次查找都会找到叶子结点(因为只有叶子结点包含卫星数据的相关信息),而 B 树就不是,B 有时候会找到叶子结点,有时候只找到中间结点就不找了,B+ 树查找性能上比 B 树要稳定

  • 范围查询更简单

    在范围查询时候,若查询 a-b 索引的数据,B 树需要做中序遍历,B+ 树只需要在结点链表上做遍历就行了

B+ 树规则

img

  • 1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点
  • 2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
  • 3.每一个父节点中的元素会出现在所有子结点中,且是子结点的最大(最小值)

B+ 树应用

mysql 使用 B+ 树作索引

好文推荐

https://www.jianshu.com/p/1f2560f0e87f/

发布了197 篇原创文章 · 获赞 62 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/abcnull/article/details/104600085