最左前缀法则
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
比如在一个 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为:profession,age,status。
对于最左前缀法则指的是,查询时,最左变的列,也就是profession必须存在,否则索引全部失效。 如下
select * from tb_user where age = 21 and status = '0';
但是查询时,如果跳过了age这个列,后面的列索引是不会使用的,也就是索引部分生效,如下
select * from tb_user where profession = '软件工程' and status = '0';
范围查询
联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。
select * from tb_user where profession = '软件工程' and age > 30 and status = '0';
当范围查询使用> 或 < 时,是会走联合索引,但是像上面这种情况,范围查询右边的status字段是没有走索引的
规避方法:
但是如果使用 >= 或 <= 时,所有的字段都是走索引的。如下
select * from tb_user where profession = '软件工程' and age >= 30 and status = '0';
所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 <