为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
来源:互联网 发布:word文档下载mac版 编辑:程序博客网 时间:2024/05/14 12:31
B树:
B+树
1) B+-tree的磁盘读写代价更低
B+-tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
举个例子,假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵9阶B-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+树的最主要原因
- 为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
- 为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
- 为什么说B+树比B 树更适合实际应用中操作系统的文件索引和数据库索引?
- B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引
- B+树比B树更适合做文件索引的原因
- 【数据结构之二叉树】(二)B+树比B树更适合做文件索引的原因
- 【数据结构之二叉树】(二)B+树比B树更适合做文件索引的原因
- 数据库中B-Tree索引和hash索引的特征
- 【数据结构之二叉树】(一)B树、B-树、B+树、B*树介绍,和B+树更适合做文件索引的原因
- 数据库索引和B-tree的联系
- 数据库索引和B-tree的联系
- 数据库索引和B-tree的联系
- [数据库]MySQL Hash索引和B-Tree索引的区别
- 数据库索引-B-Tree索引
- B-tree在外部存储和数据库索引中的应用
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- mysql索引:b tree索引和hash索引的区别
- Android自定义控件2-简单的写字板控件
- 19_读取短信内容
- mysql 查询理解
- 中介者模式
- 20_读取播放音效
- 为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
- 二分搜索的java源码实践
- 21_锁屏和恢复出厂设置
- Android Studio 引用jar和 so 文件
- 理解TimesTen中两个CheckPoint文件与Trans Log的关系及其原理
- MyEclipse快捷键大全
- struct dirent和DIR结构体
- 1.1.1 Linux是什么
- bzoj2811 apio2012 守卫 guard 贪心