【MySQL】为什么使用B+树做索引

MySQL的innoDB引擎使用的是B+树的结构来存储索引的,那么为什么会使用B+树呢?为什么不使用其他的结构?本篇我们深入MySQL底层来了解B+树。本文中说到的MySQL都是InnoDB引擎的

在这之前,先了解一下InnoDB是如何存储数据的

MySQL是根据数据页的方式来存储数据的,每个数据页包含七个部分

把这些页连接起来,相当于一个双向链表

那索引就相当于是这些数据页的目录,索引的作用就是更快的找到这些数据页

那么B+树的设计就符合这些特点

B+树仅在叶子节点存储数据,在非叶子节点,存储的是索引值,就可以使B+树在非叶子节点在相同空间的情况下可以存储更多的索引来指向叶子节点,所以B+树看起来更矮胖,层级更低

为什么不用B树

这就要说一下B树与B+树的区别了

B树在自己的非叶子节点也存储了数据,在数据页相同容量的情况下,B树存储的数据条数更少,就会导致B树的层级变高

那么又有人会问,层级高有什么影响吗?

当然是有的,MySQL会将数据持久化到磁盘中,在每一次遍历节点的时候都是一次I/O操作,我们知道I/O操作是分成慢的,同时也要耗费较多的资源,所以MySQL在设计索引结构的时候就要设计成层级较低的结构

而且B+树比B树更节约磁盘资源。

相关推荐
sunshine8853 小时前
财务RPA的深水区应用:超越自动化,迈向智能决策支持
数据库
efir OONA3 小时前
MySQL数据库误删恢复_mysql 数据 误删
数据库·mysql·adb
zhangchaoxies4 小时前
如何在 Go 中安全复制接口指针所指向的值
jvm·数据库·python
陈陈CHENCHEN4 小时前
【数据库】MySQL 8.0.40 至 8.0.44 RPM 方式升级指南
数据库·mysql
Azhao11064 小时前
一文读懂分享网站模块介绍(附实操教程)
mysql
m0_734949795 小时前
怎么利用Navicat进行调整备份文件压缩等级_详细配置与操作步骤
jvm·数据库·python
T.i.s5 小时前
番外续2-MIT-BIH Arrhythmia Database
数据库
有味道的男人5 小时前
AI 效率翻倍:对接 1688 拍立淘接口,商品全量信息一键抓取
数据库
m0_741173335 小时前
如何处理SQL中的NULL值_使用ISNULL或COALESCE函数
jvm·数据库·python
志栋智能6 小时前
超自动化巡检:解锁运维数据的深层价值
运维·服务器·数据库·自动化