B+Tree 与 B-Tree 结构详解

概述

B+树与B树,是数据库中常用的两种关键结构。

算法可视化:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

 

一、B+树

演示: https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

原理:https://www.programiz.com/dsa/b-plus-tree

B+树 是目前最常用的一种索引数据结构。B+树(B+ Tree)是B树的一种变体,广泛应用于数据库系统和文件系统的索引结构。
与B树相比,B+树在结构上有一些改进,特别是在提高查询效率、范围查找性能和磁盘I/O效率等方面更具优势。

定义

B+树 是 B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层内部节点关键字作为索引使用。

B+树中的节点分为两类:

内部节点:不存储实际数据,仅存储键值用于指引查找方向。每个内部节点有多个子节点指针,节点中键值将子节点分隔成不同区间。
叶子节点:存储实际的键值数据指针。所有数据都存储在叶子节点中,并且叶子节点之间通过链表相连。

一棵 (Order/Degree) 的 B+树 定义如下( 注意: B+树的阶数 m表示一个节点最多能有m个子女(子节点),也就是每个节点上最多的键值个数.)

  1. 假设B+树的阶数为 m,则每个结点至多有m个子女(子节点/关键字),有k个子女的结点必有k个关键字:
    1. 每个内部节点 non-leaf 最多有 m 个子节点,至少有 ⌈m/2⌉ 个子节点
    2. 每个叶子节点 leaf 存储 ⌈m/2⌉ 到 m 个 键值/关键字(子女)
  2. 叶子节点包含所有键值和对应的数据指针。这些键值按照递增顺序排列,并通过链表连接,支持快速范围查询。
  3. 树的平衡性:B+树始终保持平衡,所有叶子节点位于同一层,查找的时间复杂度为 O(log⁡n)。
  4. 叶子节点的链表结构:B+树中的叶子节点通过链表相连,方便进行顺序遍历或范围查找。

 

B+树 的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止

posted @ 2024-12-11 11:33  suntroop  阅读(409)  评论(0)    收藏  举报