B树与B+树

来源:互联网 发布:冒泡排序java从小到大 编辑:程序博客网 时间:2024/05/21 19:33

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

特点
1、任何一个关键字出现且只出现在一个结点中;
2、非叶子节点除了保存关键字,还保存指向关键字记录的指针,搜索有可能在非叶子结点结束;

B+树
B+树是应文件系统所需而出的一种B树的变型树。
这里写图片描述

特点
1、非叶子节点只保存关键字(只用来索引)不保存指向关键字记录的指针,因此搜索不可能在非叶子节点结束。
2、所有关键字及其记录(或者指向关键字记录的句柄)都保存在叶子节点。
3、叶子结点本身依关键字的大小顺序链接,支持顺序检索。

B+树与B树的比较
1、B+树所有的叶子结点包含了全部关键字的信息且关键字有重复,B树的关键字分散在整个树中且关键字不会重复。
2、B+树的叶子结点本身按关键字的大小顺序进行链接,支持顺序查找。
3、B+树的非叶子节点只保存关键字,不保存记录,所有记录保存在叶子节点,查找只能在叶子节点结束。
4、B数的非叶子节点,也保存了记录,因此查找可以在非叶子节点结束。

B+树与操作系统的文件索引和数据库索引
为什么说B+树比B 树更适合实际应用中操作系统的文件索引和数据库索引?
B+树的磁盘读写代价更低
B+树的非叶子结点并没有指向关键字具体信息的指针。因此其非叶子结点相对B 树更小,如果把所有同一个非叶子结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,树的高度相应降低,数的高度就对应I/O的次数,查找效率相应提高。因为树的高度决定了磁盘读写的次数,相对内存处理速度,磁盘I/O是非常耗时的操作,是查找效率的主要因素,降低树的高度就等于提高查询效率。