1.最左前缀法则
如果使用了联合索引,要遵守最左前缀法则。最左前缀法则是指:查询从索引的最左列开始,且不跳过索引中的列。
如果跳过了某 一列,索引将会部分失效(后面的字段索引失效)
可以看到我创建了一个联合索引包含了三个字段birth_date,first_name,last_name
当我们按索引顺序来查询的时候会得到结果
当我们打乱一下顺序
发现并没有影响。
当我们删掉中间一个条件,也就是first_name
发现索引部分失效了,其索引只使用了birth_date='1953-09-02'这一个条件,这也验证了之前提到的如果跳过了某 一列,索引将会部分失效(后面的字段索引失效)
范围查询
联合索引中,出现范围查询(<,>),范围查询右侧的列索引失效
具体对比可以参考下图
也就是说在一定要使用范围查询的情况下,尽可能使用>=或者<=
索引失效:
1.不要在索引列上进行运算操作,否则索引将失效。
2.字符串类型字段使用时不加引号,索引失效。
3.模糊查询中如果仅仅尾部模糊匹配,索引不会失效,如果是头部模糊匹配,索引失效。
4.用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引将会失效。
5.如果mysql评估索引比全表扫描慢,则不使用索引