【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树更节约磁盘资源。

相关推荐
舒一笑15 分钟前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
鼠鼠我捏,要死了捏37 分钟前
生产环境MongoDB分片策略优化与故障排查实战经验分享
数据库·mongodb·分片
KaiwuDB1 小时前
KWDB 分布式架构探究——数据分布与特性
数据库·分布式
笨蛋不要掉眼泪1 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
Leiwenti3 小时前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
你的电影很有趣3 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存
NineData3 小时前
2025 DTCC大会来了,NineData联合创始人周振兴将分享《AI重塑数据库管理模式》的主题演讲
数据库
NineData3 小时前
NineData亮相2025中国数据库技术大会,并荣获《年度优秀技术团队奖》
数据库
NightDW3 小时前
连续周更任务模块的设计与实现
java·后端·mysql
码农阿豪4 小时前
KingbaseES数据库增删改查操作分享
数据库·oracle