(B树)B-树和B+树

B-树

B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树,特此说明。

B-树是一种多路搜索树,形如:

(B树)B-树和B+树_第1张图片

特点

1、任何一个关键字出现且只出现在一个结点中;

2、非叶子节点除了保存关键字,还保存指向关键字记录的指针,搜索有可能在非叶子结点结束;

B+树

B+树是应文件系统所需而出的一种B树的变型树。形如:

特点

1、非叶子节点只保存关键字(只用来索引)不保存指向关键字记录的指针,因此搜索不可能在非叶子节点结束。
2、所有关键字及其指向关键字记录的指针都保存在叶子节点。

3、叶子结点本身依关键字的大小顺序链接,支持顺序检索。

B+树与B树的比较

1、B+树所有的叶子结点包含了全部关键字的信息(包括指向关键字记录的指针),且叶子结点本身按关键字的大小顺序进行链接,支持顺序查找。
B树中关键字及指向关键字记录的指针保存在叶子结点和非叶子结点上,每个关键字出现且仅出现在其中一个结点,叶子结点不包含全部关键字信息。
2、B+所有的非叶子结点可以看成是索引部分,结点中仅含有其子树结点中最大(或最小)关键字。而B 树的非叶子节点不仅包含关键字还包含指向关键字记录的指针。

B+树与操作系统的文件索引和数据库索引

为什么说B+树比B 树更适合实际应用中操作系统的文件索引和数据库索引?
B+树的磁盘读写代价更低

B+树的非叶子结点并没有指向关键字具体信息的指针。因此其非叶子结点相对B 树更小。如果把所有同一个非叶子结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,树的高度相应降低,查找效率相应提高。因为树的高度决定了磁盘读写的次数,相对内存处理速度,磁盘I/O是非常耗时的操作,是查找效率的主要因素,降低树的高度就等于提高查询效率。
B+树的查询效率更加稳定
由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
此外,因为B树键位置不定,且在整个树结构中只出现一次,虽然可以节省存储空间,但使得在插入、删除操作复杂度明显增加。B+树相比来说是一种较好的折中。

你可能感兴趣的:(B+树在数据库索引中的应用,B-树和B+树的比较)