最左前缀法则

  • 如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
  • 以 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不存在。
  • 私信
    1,151