1.原文准备链接:

索引失效的10种场景,你知道几个呢?(面试必刷!)_索引失效的场景-CSDN博客

2. 不满足最左匹配原则

之前我已经给code、age和name这3个字段建好联合索引:idx_code_age_name。

该索引字段的顺序是:

  • code

  • age

  • name

如果在使用联合索引时,没注意最左前缀原则,很有可能导致索引失效

code字段,它是索引字段中的第一个字段,也就是最左边的字段。只要有这个字段在,该sql已经就能走索引。

这就是我们所说的最左匹配原则

详细:MySQL最左匹配原则,道儿上兄弟都得知道的原则-CSDN博客

3. 使用了select *

在该sql中用了select *,从执行结果看,走了全表扫描,没有用到任何索引,查询效率是非常低的。

4. 索引列上有计算

如果id列上面有计算,比如:

explain select * from user where id+1=2;

5. 索引列用了函数

explain select * from user  where SUBSTR(height,1,2)=17;

6. 字段类型不同

t_user表中的code字段,它是varchar字符类型的。

但如果你在写sql时,不小心把引号弄掉了,把sql语句变成了:

explain select * from user where code=101;

7. like左边包含%

查询sql语句为:

explain select * from user where code like '%1';

8. 列对比

sql这样写:

explain select * from user where id=height

9. 使用or关键字

注意:如果使用了or关键字,那么它前面和后面的字段都要加索引,不然所有的索引都会失效,这是一个大坑。

10. not in和not exists

11. order by的坑

如果order by语句中没有加where或limit关键字,该sql语句将不会走索引。

原文链接:索引失效的10种场景,你知道几个呢?(面试必刷!)_索引失效的场景-CSDN博客