b+树_b树 b+树 区别_b树 b树 区别

各位朋友,你们好,今日没有更新文章,还请见谅~ 从今天开始将连续4日更新 B+树,今日是关于 B+树基本概念的一个介绍,希望今天的点滴内容未能让你失望!

为了实现动态多层索引,通常采用 B-树 和 B+树。但是,用于索引的 B-树 存在缺陷,它的所有中间结点均存储的是数据指针(指向包含键值的磁盘文件块的指针),与该键值一起存储在B-树的结点中。这就会导致可以存储在 B-树中的结点数极大地减少了,从而增加 B-树的层数,进而增加了记录的搜索时间。

B+树通过仅在树的叶子结点中存储数据指针而消除了上述缺陷。因此,B+树的叶结点的结构与 B-树的内部结点的结构完全不同。在这里应该注意,由于数据指针仅存在于叶子结点中,因此叶子结点必须将所有键值及其对应的数据指针存储到磁盘文件块以便访问。此外,叶子结点被链接磁盘的某个位置,以提供对记录的有序访问。因此,叶子结点形成第一级索引,而内部结点形成多层索引的其他层。叶子结点的某些关键字 key 也出现在内部结点中,充当控制搜索记录的媒介。

与 B-树不同,B+树中的结点存在两个阶(order):对于阶 “a” 和 “ b”,一个用于内部结点,另一个用于外部(或叶)结点。

阶为 a 的 B+树内部结点的结构如下:

b+树_b树 b+树 区别_b树 b树 区别

对于每一个形如:

” data-formula-type=”block-equation”>

的内部结点,其中 ,每一个 表示指向子树根结点的指针b+树, 表示关键字值

对于每一个内部结点中的关键字值均满足:$K_1

对于一个位于 所指向的子树中的结点 而言,满足:

当 时,均有 .

当 时, K_{c-1}” data-formula-type=”inline-equation”> .

当 时, .

每一个内部结点最多有 a 个指向子树的指针,即 c 最大取 a .

根结点至少包含两个指向子树的结点指针,即对于根结点而言 ; 除了根之外的每个结点都包含最少 个指向子树的指针。

如果任意一个内部结点包含 c 个指向孩子结点的指针且 ,则该结点包含 的关键字。

阶为 b 的 B+树叶子结点的结构:

b树 b+树 区别_b+树_b树 b树 区别

对于每一个形如:

,,……,,P_{next}>” data-formula-type=”block-equation”>

的叶子结点,其中 , 是一个数据指针(指向磁盘上的值等于 的真实记录的指针,或者包含记录 的磁盘文件块), 是一个关键字, 表示 B+树中指向下一个叶子结点的指针。

对任意一个叶子结点均有:$K_1

每一个叶子结点至少包含 个值.

所有的叶子结点在同一层。

使用 指针可以遍历所有的叶子结点,就和单链表一样,从而实现对磁盘上记录的有序访问。

下图为一颗完整的 B+树的结构示例:

b树 b+树 区别_b树 b树 区别_b+树

B+树的优点

同为 层的 B-树和 B+树b+树,B+树可以存储更多的结点元素,更加 ”矮胖“。这也是 B+树最大的优势所在,极大地改善了 B-树的查找效率。对于同样多的记录,B+树的高度会更矮,并且 指针的出现可以帮助 B+树快速访问磁盘记录且效率非常高。总之,就是 B+树比 B-树更加好,B+树的磁盘 I / O 会更少,相比于 B-树的中序遍历,B+树只需要像遍历单链表一样扫描一遍叶子结点。

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688