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

相关推荐
Whyn几秒前
MySQL 学习笔记(二)
mysql
新中地GIS开发老师7 分钟前
地信职业百科④:GIS开发工程师
前端·数据库·gis·webgis·三维gis开发
云和恩墨15 分钟前
从“第二存储”到多智能体协作,云和恩墨充实数据基础设施产品矩阵
数据库
ClouGence21 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
霸道流氓气质22 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复26 分钟前
redis缓存和数据库数据保持一致
数据库·redis·缓存
宇宙第一小趴菜1 小时前
三、Oracle 核心原理
数据库·oracle
码出钞能力2 小时前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦2 小时前
数据库第二次作业
数据库
nVisual3 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理