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

MySQL为什么选择B+tree索引作为核心索引结构?

什么是索引:

索引(Index) 是一种用于快速定位和访问数据的特殊数据结构,索引可以加速查询,降低系统开销;而由于索引也是一种数据结构,它必然会占用一定的空间,并且当进行增删改时,会在已有的数据结构节点进行操作,从而降低了增删改的效率。(一会看了B+tree结构后再详细解释这个缺点)

为什么选择B+tree索引作为核心索引结构?

MySQL(尤其是 InnoDB 存储引擎选择 B + 树作为默认索引结构,是由 B + 树的特性与数据库的核心需求(查询效率、范围操作、稳定性、存储友好性)深度匹配决定的。

总结来讲:使用普通二叉树,如果是顺序插入,会退化成为一条链表,在搜索时和全表扫描几乎无差;比普通二叉树高级一些的红黑树,是一种平衡二叉树,可以解决顺序插入问题,但是二叉树每一个节点只能存放一个数据,当数据几百万条时,会形成深度非常大的二叉树,不仅占用空间,而且效率也会底下;B树的出现解决了前两个问题,因为B树的每一页,可以存放多条数据:以3阶B树为例:每一页可以存放两个key,有三个指针可以指向另一页,也就是说每一页都可以存放两个key,而key下面挂着的就是与之相关的数据,但由于B树的非叶子节点也会存储数据,每一页的大小也是有限的,所以还是无法完全避免空间利用率低这一问题;而B+tree做了升级改造,不同于B树,B+tree只在叶子节点存储数据,并且叶子节点包含了全部的数据,并且在叶子节点形成了单向链表,还是以3阶树为例,来看相同数据,在B树与B+tree有什么不同:

B树:

B树的每一个节点的key都会有对应value

B+tree:

B+tree只有叶子节点的key对应拥有value,非叶子节点的key只用于“导航”作用

MySQL中的B+tree结构又进行了优化,底部的单向链表变为双向链表,增加区间访问性能

 InnoDB 存储引擎中,索引可以明确划分为 聚簇索引和 二级索引

  • 聚簇索引:是表的 “核心索引”,直接与数据行物理存储绑定,叶子节点存储完整数据行;(必须存在,有且只有一个,通常有主键(id)时,会选择主键作为聚集索引;若未规定主键,但是有唯一索引,会使用第一个规定为唯一索引的指定为聚集索引;如果不存在,InnoDB 存储引擎会自动生成一个rowid作为聚集索引)
  • 二级索引:是 “辅助索引”,依赖聚簇索引存在,叶子节点存储 索引键 底下挂着 聚簇索引键(涉及回表,因为二级索引key对应的value是聚集索引,数据不完整,通过聚集索引进行回表,从而拿到全部数据)

除了 B+ 树,MySQL 还针对特定场景提供其他索引类型:例如全文索引

http://www.dtcms.com/a/477845.html

相关文章:

  • 在 Windows 11 上使用 JetBrains Rider 2025.2 创建 Avalonia 项目完整指南
  • 隐私保护与数据安全合规(十)
  • 【工业场景】用YOLOv8实现人员打电话识别
  • 丽水建设网站制作几年前我为客户建设网站
  • 主线程 MainLooper 和一般 Looper 的异同?
  • 【论文精读】STAR:基于文本到视频模型的空间-时间增强真实世界视频超分
  • 建设银行的积分网站百度渠道开户
  • 万网 速成网站嘉定品牌网站建设
  • Ruby on Rails 从0 开始入门到进阶到高级 - 10分钟速通版
  • Windows Docker Desktop占用C盘空间过大解决办法集合
  • 平面的方程公式
  • 2025年“羊城杯”网络安全大赛 线上初赛 (WriteUp)
  • 网络安全概念之网闸防火墙AI版
  • 学习笔记2: 深度学习之logistic回归梯度下降
  • 网络安全等级测评师能力评估样卷及答案
  • 网站服务器用什么系统网站建设及管理制度文章
  • 网站添加wordpress创意咨询策划公司
  • 企业网站设计专业好吗胶州房产网
  • 环境变量完全指南:用 Vite 把「配置」玩出花
  • 深入解析JAVA虚拟线程
  • 不同设计牙周探针在深牙周袋探查中的精确性与局限性比较
  • 三极管分类
  • Leetcode 3710. Maximum Partition Factor
  • 亚马逊,塔吉特采购测评:高砍单率核心原因及技术破解策略
  • SQLite3数据库——Linux应用
  • 人机关系中“看不见的手”
  • 上街区网站建设做网站用什么系统好
  • k8s cert-manager cert-manager-webhook-xxx pod 证书过期问题处理
  • 宝塔服务器磁盘爆满:占用50G磁盘空间的.forever日志文件处理导致服务崩溃的教训
  • Docker资源限制全解析