为什么要用B+ 树,而不用普通二叉树?

黎小强
2022-07-25 / 1 评论 / 259 阅读 / 正在检测是否收录...

为什么要用 B+ 树,而不用普通二叉树?

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数。

为什么不用普通二叉树?

普通二叉树存在退化的情况,如果它退化成链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。

为什么不用平衡二叉树呢?

读取数据的时候,是从磁盘读到内存。如果树这种数据结构作为索引,那每查找一次数据就需要从磁盘中读取一个节点,也就是一个磁盘块,但是平衡二叉树可是每个节点只存储一个键值和数据的,如果是 B+ 树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦,查询效率就快。

为什么用 B+ 树而不用 B 树呢?

B+相比较B树,有这些优势:

  • 它是 B Tree 的变种,B Tree 能解决的问题,它都能解决。

    B Tree 解决的两大问题:每个节点存储更多关键字;路数更多

  • 扫库、扫表能力更强

    如果我们要对表进行全表扫描,只需要遍历叶子节点就可以 了,不需要遍历整棵 B+Tree 拿到所有的数据。

  • B+Tree 的磁盘读写能力相对于 B Tree 来说更强,IO次数更少

    根节点和枝节点不保存数据区, 所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多,IO次数更少。

  • 排序能力更强

    因为叶子节点上有下一个数据区的指针,数据形成了链表。

  • 效率更加稳定

    B+Tree 永远是在叶子节点拿到数据,所以 IO 次数是稳定的。

Hash 索引和 B+ 树索引区别是什么?

  • B+ 树可以进行范围查询,Hash 索引不能。
  • B+ 树支持联合索引的最左侧原则,Hash 索引不支持。
  • B+ 树支持 order by 排序,Hash 索引不支持。
  • Hash 索引在等值查询上比 B+ 树效率更高。
  • B+ 树使用 like 进行模糊查询的时候,like 后面(比如 % 开头)的话可以起到优化的作用,Hash 索引根本无法进行模糊查询。
0

评论 (1)

取消
  1. 头像
    1
    Windows 10 · Google Chrome

    555

    回复