为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?

来源:互联网 发布:word文档下载mac版 编辑:程序博客网 时间:2024/05/14 12:31

B树:



B+树



1) B+-tree的磁盘读写代价更低

B+-tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

    举个例子,假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵9B-tree(一个结点最多8个关键字)的内部结点需要2个盘快。而B树内部结点只需要1个盘快。当需要把内部结点读入内存中的时候,B 树就比B树多一次盘块查找时间(在磁盘中就是盘片旋转的时间)

2) B+-tree的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

读者点评
本文评论下第149楼,fanyy1991针对上文所说的两点,道:个人觉得这两个原因都不是主要原因。数据库索引采用B+树的主要原因是 B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作(或者说效率太低)。

摘自:http://blog.csdn.net/v_JULY_v/article/details/6530142/


文件索引和数据库索引为什么使用B+树,个人认为:
1. 因为文件与数据库都是需要较大的存储——不可能全部存储在内存中,故要存储到磁盘上
2. 所谓索引,即是快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(B+树相比B树,其非叶子节点占用更小的空间,可以有更多非叶子节点存放在再内存中,减少大量的IO)
3. 局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)
4. 数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性
5. B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持。这是数据库选用B+树的最主要原因


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果的id被停用怎么办 公司不给年休假怎么办 单位不给年休假怎么办 换了护照后签证怎么办 护照签证页满了怎么办 我救护证过期了怎么办 友信贷款逾期4年怎么办 七日杀背包满了怎么办 东西被海关扣了怎么办 寄的快递破损了怎么办 苹果4s屏幕锁定怎么办 怀孕一个月同床了怎么办 故申请了不搬迁怎么办? 签证办好了不去怎么办 l签个人怎么办直飞香港 巴萨b队升入西甲怎么办 一天吃了2次金戈怎么办 京东发票掉了怎么办 京东发票丢了怎么办 京东的发票丢了怎么办 发票顺序拿错了怎么办 我被西海岸骗了怎么办? 微信功能被限制怎么办 微信限制领红包怎么办 微信无法领红包怎么办 微信红包不能收怎么办 抢红包被限制了怎么办 qq被限制加群怎么办 电脑拒绝访问u盘怎么办 炒菜味精放多了怎么办 魅族不能发短信怎么办 话费被恶意扣费怎么办 手机被恶意扣费怎么办 话费被软件扣费怎么办 小孩玩手机扣费怎么办 孩子玩手机扣费怎么办 手机被游戏扣费怎么办 冰岛签证拒签了怎么办 鱼缸内长青苔了怎么办? 毛巾用久了变硬怎么办 胃胀气一直嗝气怎么办