关于MySQL innodb联合索引的加锁分析

本文详细分析了MySQL InnoDB引擎在使用联合索引时的加锁情况,通过多个示例解释了不同查询条件下key len的变化原理,以及在不同隔离级别下的加锁行为,同时探讨了唯一联合索引的影响。
摘要由CSDN通过智能技术生成

关于联合索引的加锁分析,网上的文章一直较少,因此在这里记录下自己的分析,用作备忘。

关于一些简单语句的加锁分析,此处就不进行分析了,可以直接参考网上其他的文章。

表结构

CREATE TABLE `aaa` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `a1` int NOT NULL,
  `a2` int NOT NULL,
  `a3` int NOT NULL,
  PRIMARY KEY (`id`),
  KEY `aaa` (`a1`,`a2`,`a3`)
) ENGINE=InnoDB AUTO_INCREMENT=188 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

其中id是主键索引,aaa为a1 a2 a3三个字段的联合索引,非唯一索引

初始化表数据
在这里插入图片描述
初始化了20条数据,此处为了数据观察的方便性,将每行的a1 a2 a3字段的值设置为一样。

预备知识

在进行加锁分析前,我们需要知道一些预备的知识

首先分析这条语句,select * from aaa where a1>15;
在这里插入图片描述可以看到,使用了aaa这个联合索引,key len为4,并且使用了icp,这些都很容易理解。

再看这条语句,select * from aaa where a1=15 and a2>12;
在这里插入图片描述其他都一样,但是key len变成了8,根据最

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值