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

相关推荐
m0_7482515227 分钟前
Linux(CentOS)安装 MySQL
linux·mysql·centos
木卫二号Coding29 分钟前
docker-开源nocodb,使用已有数据库
数据库·docker·开源
StarRocks_labs40 分钟前
StarRocks 存算分离在得物的降本增效实践
数据库·数据仓库·湖仓
敲代码敲到头发茂密1 小时前
基于 LangChain 实现数据库问答机器人
数据库·人工智能·语言模型·langchain·机器人
一入程序无退路2 小时前
c语言传参数路径太长,导致无法获取参数
linux·c语言·数据库
陌夏微秋2 小时前
STM32单片机芯片与内部47 STM32 CAN内部架构 介绍
数据库·stm32·单片机·嵌入式硬件·架构·信息与通信
计算机学无涯3 小时前
Spring事务回滚
数据库·sql·spring
web130933203984 小时前
flume对kafka中数据的导入导出、datax对mysql数据库数据的抽取
数据库·kafka·flume
张声录14 小时前
【ETCD】【实操篇(二十)】浅谈etcd集群管理的艺术:从两阶段配置到灾难恢复的设计原则
数据库·etcd
qq_254674414 小时前
数据仓库和数据湖 数据仓库和数据库
数据库·数据仓库