在b-树中,您可以将键和数据存储在内部节点和叶节点中,但在b+树中,您必须仅将数据存储在叶节点中。

在b+树中这样做有什么好处吗?

为什么不在所有地方都使用b-树而不是b+树,因为直觉上它们看起来更快?

我的意思是,为什么需要在b+树中复制键(数据)?


当前回答

数据库系统概念示例

B+树

相应的b -树

其他回答

B+树是一种平衡的树,其中从树的根到叶子的每条路径都是相同的长度,树的每个非叶子节点都有[n/2]到[n]个子节点,其中n对于特定的树是固定的。它包含索引页和数据页。 二叉树的每个父节点只有两个子节点,而B+树的每个父节点可以有不同数量的子节点

In a B tree search keys and data are stored in internal or leaf nodes. But in a B+-tree data is stored only in leaf nodes. Full scan of a B+ tree is very easy because all data are found in leaf nodes. Full scan of a B tree requires a full traversal. In a B tree, data may be found in leaf nodes or internal nodes. Deletion of internal nodes is very complicated. In a B+ tree, data is only found in leaf nodes. Deletion of leaf nodes is easy. Insertion in B tree is more complicated than B+ tree. B+ trees store redundant search keys but B tree has no redundant value. In a B+ tree, leaf node data is ordered as a sequential linked list but in a B tree the leaf node cannot be stored using a linked list. Many database systems' implementations prefer the structural simplicity of a B+ tree.

B+树的一个可能的用途是它适用于各种情况 哪里的树长得太大,以至于它不适合可用 内存。因此,您通常期望执行多个I/O。 B+树确实经常被使用,即使它实际上适合 内存,然后你的缓存管理器可能会永久保存它。但 这是一个特殊的情况,而不是一般的情况,缓存策略是 与B+树的维护分开。

另外,在B+树中,叶子页以 一个链表(或双链表),用于优化遍历 (用于范围搜索、排序等)。所以指针的数量是 所使用的特定算法的函数。

Adegoke A, Amit

我想你们忽略的一个关键点是数据和指针之间的区别,就像本节中解释的那样。

指针:指向其他节点的指针。

数据:—在数据库索引的上下文中,数据只是另一个指向其他地方的真实数据(行)的指针。

因此在B树的情况下,每个节点都有三个信息键,指向与键相关的数据的指针和指向子节点的指针。

在B+树中,内部节点保存指向子节点的键和指针,而叶节点保存指向相关数据的键和指针。这允许为给定大小的节点提供更多的键数。节点大小主要由块大小决定。

每个节点拥有更多键的好处已经在上面解释过了,这样可以节省我的输入工作量。

The primary distinction between B-tree and B+tree is that B-tree eliminates the redundant storage of search key values.Since search keys are not repeated in the B-tree,we may not be able to store the index using fewer tree nodes than in corresponding B+tree index.However,since search key that appear in non-leaf nodes appear nowhere else in B-tree,we are forced to include an additional pointer field for each search key in a non-leaf node. Their are space advantages for B-tree, as repetition does not occur and can be used for large indices.