11、都知道数据库索引采用B+树而不是B树,原因也有很多,主要原因是 什么?12、文件索引和数据库索引为什么使用B+树?(第9个问题的详细回答)

11、都知道数据库索引采用B+树而不是B树,原因也有很多,主要原因是 什么?

主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频 繁的,而B树只能中序遍历所有节点,效率太低。

12、文件索引和数据库索引为什么使用B+树?(第9个问题的详细回答)

文件与数据库都是需要较大的存储,也就是说,它们都不可能全部存储在内存中,故需要存储到磁盘 上。而所谓索引,则为了数据的快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O 的存取次数,因此B+树相比B树更为合适。数据库系统巧妙利用了局部性原理与磁盘预读原理,将一个 节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,而红黑树这种结构,高度 明显要深的多,并且由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。

最重要的是,B+树还有一个最大的好处:方便扫库。

B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query 非常方便,而B树不支持,这是数据库选用B+树的最主要原因。

B+树查找效率更加稳定,B树有可能在中间节点找到数据,稳定性不够。

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

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

原文地址:https://www.cnblogs.com/crbhf/p/15143764.html