51-B+树

308 阅读2分钟

B+树

B+树是B树的一种变体,常用语数据库和操作系统的问题件系统中

  • MySQL数据库的索引就是基于B+树实现的

下图为B+树的大概结构

B+树与前面研究的B树,B+树有以下特点:

  1. 分为内部节点(非叶子)与叶子节点两种节点 叶子节点为最下面一层的节点,除了叶子节点以外的节点,都佳作内部节点,叶子节点与内部节点有以下特性

    • 内部节点只存储key,不存储具体数据
    • 叶子节点存储key和具体数据

    所以,可以理解为,B+树是用来存储key-value的,所以内部节点只存储key,叶子节点才用来存储key和数据

  2. 所有叶子节点,会形成一条有序链表 从上图可以看出,叶子节点之间有箭头将节点串起来,并且节点的大小是有序的

当了解完B+树的特点以后,那么B+树到底有什么用呢?

由于B+树的非叶子节点,只用来存储key,所以当B+树节点与B树节点为同样大小的节点的话,B+树可以存储更多的key,因为一个key相对于一个节点具体数据来讲,占用的空间会更少,所以可以存储更多的key,这样,可以利用key快速找到对应的节点。

B树存储Key-Value的结构如下

所以,对比B树,B+树有以下一些优势

  1. 每个节点存储的key数量更多,树的高度更低
  2. 所有的具体数据都存储在叶子节点上,所以每次查询都要查到叶子节点,查询速度比较稳定
  3. 所有的叶子节点构成了一个链表,做区间查询时更方便