MySQL中为什么使用B+树做索引而不采用B-树

B-树在提高了IO性能的同时并没有解决元素遍历的低下的问题,然而B+树只需要去遍历叶子节点就可以实现遍历整棵树。由于数据库中基于范围的查找是非常频繁的,B树的查找效率就很低下。

主要原因:

1.B+树的磁盘读写代价更低:B-树/B+树的特点就是每层节点数目非常多,层数很少,目的就是为了减少磁盘IO次数,B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对于B-树更小,但是B-树的每个节点都有数据域,这就无形之中增加了节点的大小,也就是说增加了磁盘IO次数。然而B+树除了叶子节点外其他阶段并不存储数据,节点小,磁盘IO次数就降低了。

2.B+树的查询效率更加稳定:B+树只有叶节点存放数据,其余节点用来索引,所以任何关键字的查找必须走一条从根节点道叶子节点的路,所以关键字查询的路径长度相同,导致每个数据的查询效率相当。然而B-树中每个索引节点都会有数据域。

3.B+树由于它所有的数据域都在叶子节点上,并且所有叶子节点之间都有一个链指针。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。在数据库中基于范围的查询就很频繁,然而B树就不支持这样的遍历操作。因为其分支节点同样存储着数据,要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况。因此B+树更适合用于数据库索引。

posted @ 2023-08-06 11:33  往事携冷风  阅读(245)  评论(0编辑  收藏  举报