B+树

B+树是数据库索引的底层数据结构,具有优异的范围查询性能

一个m阶的B树具有如下几个特征:

1.根结点至少有两个子女。

2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m

3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m

4.所有的叶子结点都位于同一层。

5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

一个m阶的B+树具有如下几个特征:

1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

再来看下B+树的例子

在这里插入图片描述
在上面这棵树中,可以看到每一个父节点的元素都出现在子节点中,是子节点最大或最小元素
根节点元素8是子节点2,5,8的最大元素,也是叶子节点6,8的最大元素
根节点元素15是子节点11,15,8的最大元素,也是叶子节点13,15的最大元素
在这里插入图片描述
而且叶子节点用指针连接在一起
在这里插入图片描述
只有叶子节点有数据,非叶子节点都是索引。当然这指的是聚集索引,非聚集索引叶子节点包含的不是数据,而是指向数据的指针

为什么要这样设计呢,从两个维度来分析:

1,单元素查询
单元素查询的时候,B+树会自顶向下逐层查找节点,最终找到匹配的叶子节点,比如我们要找的是元素3
第一次磁盘IO:

在这里插入图片描述
第二次磁盘IO:
在这里插入图片描述
第三次磁盘IO:
在这里插入图片描述
比一般的树io次数少

2,范围查询
范围查询就优势更大了,一般的树查询,需要频繁的中序遍历,而b+树只要遍历链表
B+树的范围查找过程
自顶向下,查找到范围的下限(3):
在这里插入图片描述
通过链表指针,遍历到元素6, 8:
在这里插入图片描述
通过链表指针,遍历到元素9, 11,遍历结束:
在这里插入图片描述

总结

B+树的优势:

1.单一节点存储更多的元素,使得查询的IO次数更少。

2.所有查询都要查找到叶子节点,查询性能稳定。

3.所有叶子节点形成有序链表,便于范围查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值