dha*_*0us 281 database data-structures
在b树中,您可以将密钥和数据存储在内部和叶节点中,但是在b +树中,您必须仅将数据存储在叶节点中.
在b +树中执行上述操作有什么好处吗?
为什么不在任何地方使用b-trees而不是b + tree,直觉上它们似乎更快?
我的意思是,为什么你需要在b +树中复制密钥(数据)?
Ros*_*one 399
下图有助于显示B +树和B树之间的差异.
B +树的优点:
B树的优点:

小智 103
B +树相对于B树的主要优点是它们允许您通过删除指向数据的指针来包含更多指向其他节点的指针,从而增加扇出并可能减少树的深度.
缺点是,当您在内部节点中找到匹配项时,没有早期出局.但由于两个数据结构都有巨大的扇出,所以绝大多数匹配都会在叶子节点上进行,这使得B +树的平均效率更高.
Jef*_* Mc 31
B +树执行全扫描更容易,性能更高,就像查看树索引的每一段数据一样,因为终端节点形成链表.要使用B树进行完整扫描,您需要进行完整的树遍历以查找所有数据.
另一方面,当您进行搜索(通过密钥查找特定数据)时,B树可以更快,特别是当树驻留在RAM或其他非块存储中时.由于您可以提升树中常用节点,因此获取数据所需的比较较少.
and*_*ter 28
- 在B树中搜索密钥和存储在内部或叶节点中的数据.但在B + -tree数据中只存储叶子节点.
- 搜索B +树中的任何数据非常容易,因为所有数据都在叶节点中找到.搜索B树需要完整遍历.
- 在B树中,可以在叶节点或内部节点中找到数据.删除内部节点非常复杂.在B +树中,数据仅在叶节点中找到.删除叶节点很容易.
- B树中的插入比B +树更复杂.
- B +树存储冗余搜索关键字,但B树没有冗余值.
- 在B +树中,叶节点数据按顺序链接列表排序,但在B树中,不能使用链接列表存储叶节点.许多数据库系统的实现更喜欢B +树的结构简单性.
cam*_*ino 14
数据库系统概念示例第5
B + - 树

相应的B树

小智 11
Adegoke A,Amit
我想人们缺少的一个关键点是数据和指针之间的差异,如本节所述.
指针:指向其他节点的指针.
数据: - 在数据库索引的上下文中,数据只是指向其他位置的实际数据(行)的另一个指针.
因此,在B树的情况下,每个节点具有三个信息密钥,指向与密钥相关联的数据的指针和指向子节点的指针.
在B +树内部节点保持键和指向子节点的指针,而叶节点保持键和指向相关数据的指针.这允许给定大小的节点具有更多数量的密钥.节点的大小主要由块大小决定.
上面解释了每个节点拥有更多密钥的优势,因此我将节省我的打字工作量.
Jav*_*ier 10
B + Trees在基于块的存储中特别好(例如:硬盘).考虑到这一点,你可以获得几个优势,例如(从我的头脑中):
高扇出/低深度:这意味着您必须获得更少的块来获取数据.如果数据与指针混合在一起,则每次读取都会获得较少的指针,因此您需要更多的搜索来获取数据
简单一致的块存储:内部节点有N个指针,没有别的,叶子节点有数据,没有别的.这使得解析,调试甚至重构变得容易.
高密钥密度意味着顶级节点几乎肯定在缓存上,在许多情况下,所有内部节点都可以快速缓存,因此只有数据访问才能进入磁盘.
小智 6
**
B-Tree 的主要缺点是难以按顺序遍历键。B+ Tree 保留了 B-Tree 的快速随机访问特性,同时也允许快速顺序访问
** 参考:使用 C 的数据结构// 作者:Aaro M Tenenbaum
小智 5
在B + Tree中,由于只有指针存储在内部节点中,因此它们的大小明显小于B树的内部节点(存储数据+密钥).因此,B +树的索引可以在单个磁盘读取中从外部存储器获取,处理以找到目标的位置.如果它是B树,则每个决策过程都需要读取磁盘.希望我明白我的观点!:)