数据准备
网络异常,图片无法展示
|
最左前缀法则
- 如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
- 以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。
网络异常,图片无法展示|
- 在 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为profession, age,status。
- 对于最左前缀法则指的是,查询时,最左变的列,也就是profession必须存在,否则索引全部失效。而且中间不能跳过某一列,否则该列后面的字段索引将失效。 接下来,我们来演示几组案例,看一下具体的执行计划:
explain select * from tb_user where profession = '软件工程' and age = 31 and status= '0';
网络异常,图片无法展示|explain select * from tb_user where profession = '软件工程' and age = 31;
网络异常,图片无法展示|explain select * from tb_user where profession = '软件工程';
网络异常,图片无法展示|- 以上的这三组测试中,我们发现只要联合索引最左边的字段 profession存在,索引就会生效,只不过索引的长度不同。 而且由以上三组测试,我们也可以推测出profession字段索引长度为47、age字段索引长度为2、status字段索引长度为5。
explain select * from tb_user where age = 31 and status = '0';
网络异常,图片无法展示|explain select * from tb_user where status = '0';
网络异常,图片无法展示|- 而通过上面的这两组测试,我们也可以看到索引并未生效,原因是因为不满足最左前缀法则,联合索引最左边的列profession不存在。