B+树

文章更新时间:2021/05/06

一、引言 

   B+树是B树的一个变种,用于查询时有更高的性能,常用作于MySQL等关系型数据库的索引进行使用,必须了解一波~

二、B+树

  定义:B+树可以简单地看作n叉排序树

  常见应用:关系型数据库索引,如mySql索引,和操作系统的文件系统中

  优势:

  • 由于卫星数据存在于叶子节点,所以中间节点可以存储更多的元素,使得查询的IO次数更少
  • 所有查询都要查找到叶子节点,查询性能稳定
  • 所有叶子节点形成有序链表,便于范围查询

  下面通过一个查找元素的例子来进行解析~

  查找元素的流程:

   上图是B+树查找元素的流程示例,也许第一次看会比较蛋疼,那我们先从它的几个特点说起:

  m阶的B+树独有特征:

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

  解析:我们可以对着上面的原则进行解析,图中是一个3阶的B+树,那么m3,m/2 <= k <= m则k可以取23

  • 如根节点,有k【2】个子树包含了k【2】个元素;又如中间节点有k【3】个子树包含了k【3】个元素
  • 所有叶子节点包含了整棵树的所有元素信息,且依次从大到小排列,用指针相连
  • 所有的中间节点元素都同时存在于子节点,且为其中的最大(或最小)元素,这在图中也能看出。

  PS:卫星数据:指的是索引元素所指向的数据记录

  PS:B+数作为索引使用时,中间节点不保存数据只做索引用,所有数据的定位指针【卫星数据】保存在叶子节点中。

  PS:在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针

 

posted @ 2020-06-04 22:26  有梦想的肥宅  阅读(239)  评论(0编辑  收藏  举报