关于联合索引的加锁分析,网上的文章一直较少,因此在这里记录下自己的分析,用作备忘。
关于一些简单语句的加锁分析,此处就不进行分析了,可以直接参考网上其他的文章。
表结构
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,这些都很容易理解。