当前位置: 首页 > article >正文

5、MySQL为什么使用 B+树 来作索引【高频】

  1. 首先,B树其实就是多叉平衡树,它最多有 M 个子节点,一个节点内最多有 M-1 个数据,每个数据都由 索引 和 记录 组成。相比于平衡二叉树,B树的高度更小,从而减少IO次数。但它也有很大的问题:为了查询某个记录,B树每次IO都需要把一个节点内的数据加载到内存中,与目标的索引进行比对,这会占用内存空间

在这里插入图片描述

  1. B+树其实就是B树的升级:
  • 只有叶子节点才会存放 索引 和 记录,并形成一条链表;而非叶子节点只存放索引
  • 所有的索引和记录都统一汇集到叶子节点中,形成一条链表

​ 因此,对于单点查询、范围查询、插入删除,B+树都拥有更高的性能

clip_image039

图片
  • 单点查询:
    • B 树进行单个索引查询时,最快可以在 O(1) 的时间内就查到,但有时需要访问到叶子节点才能找到索引。所以 B 树的查询效率 波动较大。平均来看,会比 B+ 树稍快一些。
    • 但是,如果数据量相同,B+树的一个节点内可以存放更多的索引,因此 B+ 树比 B 树高度更小,查询底层节点的磁盘 I/O次数会更少。
  • 范围查询
    • B+ 树所有叶子节点间有一个链表进行连接,所以可以直接在链表上进行范围查询,而 B 树只能通过一个节点一个节点的比对,,范围查询效率不如 B+ 树。
    • 所以 对于大量的单个索引查询的场景,可以考虑 B 树,比如nosql的MongoDB;存在大量范围检索的场景,适合使用 B+树,比如数据库
  • 删除和插入效率:
    • 由于B+所有的记录 都保存在叶子节点中,而非叶子节点中只有一部分记录的索引。也就是说,B+树的叶子节点中有很多冗余节点。所以,当删除一个索引时,往往只需要在叶子节点中移除这个节点,非叶子节点并不需要做出调整 或者只需要做一些很小的调整;插入也是同样,就算节点饱和,存在节点的分裂,但是最多只涉及树的一条路径。
    • 而 B树的所有节点既存索引,又存记录,删除和插入节点的时候树形的变化非常复杂

http://www.kler.cn/a/597599.html

相关文章:

  • 矩阵可相似对角化
  • G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门
  • 强化学习中循环神经网络在序列决策中的应用研究
  • 2025新版懒人精灵零基础安装调试+lua基础+UI设计交互+常用方法封装+项目实战+项目打包安装板块-视频教程(初学者必修课)
  • 基于javaweb的SpringBoot医院管理系统设计与实现(源码+文档+部署讲解)
  • maven在windows系统上的详细安装和配置
  • 无阻塞UI:通过Web Worker提升用户体验的新途径
  • 基于LabVIEW的Windows平台高速闭环控制
  • windows+ragflow+deepseek实战之一excel表查询
  • 第19章:StatefulSet:有状态应用部署最佳实践
  • dify案例分享-儿童故事绘本语音播报视频工作流
  • Lustre 语言的 Rust 生成相关的工作
  • 高考志愿填报管理系统基于Spring Boot SSM
  • 流程图软件推荐,好用的流程图工具分享
  • 西门子200smart之modbus_TCP(做主站与第三方设备)通讯
  • 常考计算机操作系统面试习题(四)
  • 蓝桥杯备考-----》前缀和+哈希表之连续自然数和
  • kotlin 内联函数 inline
  • Java集合框架深度剖析:从数据结构到实战应用
  • RestTemplate和RPC区别