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


    为什么要用 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 索引根本无法进行模糊查询。
  • 相关阅读:
    Mybatis
    关联通达信自动化交易接口的代码分享
    29 WEB漏洞-CSRF及SSRF漏洞案例讲解
    【机器学习基础】K-Means聚类算法
    typescript
    【组合数学 隔板法 容斥原理】放球问题
    v-model实现父子互传数据
    Nginx详细学习记录
    FreeRTOS中汇编指令
    RPA处理重复工作,助力高效资金管理
  • 原文地址:https://blog.csdn.net/limingqiang007/article/details/126517611