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

相关推荐
tzhou6445239 分钟前
MySQL备份与恢复
数据库·mysql·adb
一过菜只因1 小时前
MySql Jdbc
android·数据库·mysql
思成不止于此1 小时前
MySQL 查询实战(三):排序与综合练习
数据库·笔记·学习·mysql
茅坑的小石头1 小时前
数据库表设计,概念模型、逻辑模型、物理模型的区别,目标、主要内容、所处阶段、面向人群,数据库无关性
数据库
tebukaopu1482 小时前
mysql数据备份还原
数据库·mysql
zyxqyy&∞2 小时前
mysql代码小练-2
数据库·mysql
JIngJaneIL2 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
poemyang2 小时前
像Git一样管理数据:深入解析数据库并发控制MVCC的实现
mysql·事务·mvcc
only-qi3 小时前
Redis如何应对 Redis 大 Key 问题
数据库·redis·缓存