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 @   往事携冷风  阅读(260)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示