问题
Mysql中组合索引的最左前缀原则想必大家都很熟悉,最近在学习的时候,我进行了几个小实验发现了一些很有趣的问题(测试环境为Mysql8.0.23)
表结构如下:
表里的字段只有主键索引(id
)和联合索引(a,b,c
)
这个数据库表创建了(a,b,c)这个联合索引,当我们创建组合索引abc时,Mysql其实维护了3个索引:a,ab和abc。最左前缀原则要求从左至右依次命中组合索引,要能使其生效必须保证 where 条件里最左边是 a 字段,比如以下这几种情况:
- where a = 0;
- where a = 0 and b = 0;
- where a = 0 and c = 0;
- where a = 0 and b = 0 and c = 0;
- where a = 0 and c = 0 and b = 0;
好,知道了最左前缀原则后我们进行一下小测试