MySQL中InnoDB引擎的辅助索引扩展

本文探讨了MySQL中InnoDB引擎辅助索引(二级索引)的扩展特性。当连续插入辅助索引值相同但主键值不同的记录时,InnoDB会将辅助索引扩展为包括主键字段,确保查询时按照辅助索引和主键顺序排序。通过官方文档和多个博客的分析,确认辅助索引的非叶子节点与叶子节点一样,存储了辅助索引和主键索引的值,以提高查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不少的书或博客,在介绍InnoDB引擎索引原理的时候,都会给出如下类似的两幅图(比如参考博客2和3):

由图可知,主键索引和辅助索引(二级索引)分别是一棵B-树和B+树。其中主键索引的非叶子节点只存储主键信息,只有叶子节点会存储完整的数据行记录。整个数据表就是按照主键索引的大小顺序存储的,因而主键索引又叫聚簇索引。而对于辅助索引,非叶子节点只存储辅助索引对应的索引字段,而叶子节点的data字段存储主键索引的值。所以当我们需要根据辅助索引查找行记录时,需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录

我们知道,当往表中插入新数据时,主键索引和辅助索引文件都会发生调整,以保证索引的顺序性。那我们考虑这样一个场景:当我们连续地插入两条辅助索引值相同,但主键值不同的两条数据记录时,辅助索引会怎么排列这两条记录的顺序呢?比如我再插入一条记录(17,"Alice", 30),那在辅助索引这幅图中,(Alice,17)这个节点最终是会在(Alice,18)这个节点的左边还是右边呢?</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值