B+树介绍

290 阅读3分钟

1.B+树的定义

B+树是一个N叉排序树,一棵B+树包括根节点,内部节点(非终端节点),叶子节点(终端节点)。

1.1B+树的特性

  • 除根节点外,其他所有节点要求所含关键字个数必须>=⌈m/2⌉。比如一个3阶的B+树,其节点的关键字个数就必须大于等于2个。
  • 叶子节点含有全部信息并且含有指向关键字记录的指针,按从小到大的顺序排列。
  • 非终结点是起到索引的作用,是其子节点的最大值或最小值
  • 包含两个指针头,一个指向根节点,另一个指向关键字最小的叶子节点。

image.png

1.2B+树的特点

  • 叶子节点是稠密分布,即每个关键字对应一个索引。非终结点相当于其子节点的索引,是稀疏索引。
  • 查找过程是从上到下,不可能在非子节点终止,故查找效率稳定。
  • 相比于B-树,更适合文件索引系统。

1.3B+树与B-树的比较

  • 信息存储方式不同,B+树全部信息(数据+索引)都存储在叶子节点,内部节点只用于索引。而B-树每个节点都存有部分信息。
  • 由于B+树的内部索引只包含索引信息,所占内存比B-树更小,所以一次读写的数量要更多,读写的次数相对较少,读写的代价也就更小。
  • B+树每次查找都从上找到下,每次查找的路径长度都是一样的。而B-树可能在中间点就结束查找了。B+树的查找效率更加稳定。

2.B+树的应用

介绍B+树的具体实现以及在MySQL中的应用

2.1B+树的插入

大致分为以下4种情况

  1. 直接插入根节点中
  2. 插入根节点,但是子节点过分,需要进行分裂
  3. 当前节点是非根节点,且插入后节点关键字数目小于等于阶数,这里还要考虑新插入的节点是否是新索引
  4. 当前节点是根节点,插入后节点的关键字数目大于阶数。有两种情况,分别是同一层加一个和加一层。

树的删除与插入类似,主要考虑合并问题。

2.2MySQL中B+树的应用

(1)MyISAM

包括一个索引文件和数据文件,它的主索引是非聚集索引。当我们查询的时候,我们找到叶子节点中保存的地址,然后通过地址我们找到对应的信息。

(2)InnoDB 仅包含一个数据文件,索引本身就是数据。它是聚集索引的。

MyISAMInnoDB
不支持事务支持事务
不支持外键支持外键
方便读方便读写(修改)操作
非聚集索引聚集索引

当修改时,数据库发生了变化,那么主键的地址也就发生了变化,这样MyISAM的主索引和辅助索引就需要进行重新建立索引。而InnoDB只需要改变主索引,因为它的辅助索引是存主键的。