MySQL数据库索引的数据结构

数据库索引的功能就是让查找更加的高效,所以索引的数据结构应该是能够加速查找的数据结构。

MySQL的innoDB存储引擎的索引的数据结构就是多叉搜索树中的b+树,这可以说是为索引量身定做的一个数据结构。

首先,索引可以通过主键,unique修饰,也可以直接使用sql语句创建。当用主键给修饰id列,创建出索引,b+树是如何存储每个节点并提高查找效率的呢?

b+树相比普通多叉搜索树的特点:

(1)b+树是棵平衡树,树的深度都是差不多的,查找的次数不会相差很大。

(2)b+树的叶子节点包含了整个树所有的数据。

就这两个特点,让b+树成为了和索引完美适配的搜索树。

(1)因为b+树的叶子节点中包含了所有的数据,所以只需要在叶子节点中存储一条完整的数据,非叶子节点只存储用来做索引的那一列的值,大大减小的存储空间。

(2)因为数据库都是在磁盘上存储的,每次比较都要从磁盘上读取数据,b+树是多叉树,每次io读取一个节点可以获取多个数据来比较,减少了io次数,加快了比较效率。

(3)因为只有叶子节点才有完整数据,所以每次查询都会查到叶子节点,并且b+树是平衡树,所以深度都差不多,所以不管查询什么数据,最后的io次数都是差不多的,保证了查询的稳定。

当一个表中除了主键之外,还有其他的索引的时候,其他的索引的叶子结点就不是存储的整条数据了,而是存储的主键索引的叶子节点的位置。

所以其他索引查找时最终都会回到主键索引去获得整条数据。这也进一步节省了索引的空间消耗。这个操作叫做回表。

相关推荐
松涛和鸣4 分钟前
59、 IMX6ULL按键驱动开发:轮询到中断的实现
linux·服务器·c语言·arm开发·数据库·驱动开发
XT46259 分钟前
创建唯一索引但存在NULL
数据库
IT陈图图15 分钟前
Flutter × OpenHarmony 文件管家:数据结构设计与实现
数据结构·flutter
扑火的小飞蛾16 分钟前
【Oracle Database 分区表】之新特性_18c(三)
数据库·oracle
九章-20 分钟前
集中式数据库 vs 分布式数据库:2026 最新对比,选哪个更合适?
数据库·分布式·集中式
softshow102625 分钟前
Redis 分布式锁必避问题及解决方案
数据库·redis·分布式
budingxiaomoli27 分钟前
优选算法-哈希表
数据结构·算法·散列表
韩立学长33 分钟前
【开题答辩实录分享】以《足球球员数据分析系统开题报告》为例进行选题答辩实录分享
java·数据库·mysql
Gauss松鼠会35 分钟前
【openGauss】openGauss 如何进行数据库例行维护
数据库·sql·database·opengauss
小-黯40 分钟前
QT编译MySQL驱动教程(Windows/Linux)
windows·qt·mysql