B+树是 B-树的变体,也是一种多路搜索树。
B+的搜索与 B-树也基本相同,区别是 B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;
B+的特性:
原因: 增删文件(节点)时,效率更高,因为 B+ 树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率
使用场景:
文件系统和数据库系统中常用的 B/B+ 树,他通过对每个节点存储个数的扩展,使得对连续的数据能够进行较快的定位和访问,能够有效减少查找时间,提高存储的空间局部性从而减少 I/O 操作。他广泛用于文件系统及数据库中,如: Windows:HPFS 文件系统 Mac:HFS,HFS+ 文件系统 Linux:ResiserFS,XFS,Ext3FS,JFS 文件系统 数据库:ORACLE,MYSQL,SQLSERVER 等中
B 树:有序数组+平衡多叉树 B+树:有序数组链表+平衡多叉树
B+ 树的优点:
B+数插入和平衡
B+ 树还有一个最大的好处,方便扫库,B 树必须用中序遍历的方法按序扫库,而 B+ 树直接从叶子结点挨个扫一遍就完了,B+ 树支持 range-query 非常方便,而 B 树不支持。这是数据库选用 B+树的最主要原因。
比如要查 5-10 之间的,B+ 树一把到 5 这个标记,再一把到 10,然后串起来就行了,B 树就非常麻烦。B 树的好处,就是成功查询特别有利,因为树的高度总体要比 B+ 树矮。不成功的情况下,B 树也比 B+ 树稍稍占一点点便宜。