数据库索引失效的场景

原文链接:https://blog.csdn.net/maikelsong/article/details/81003207

1、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将放弃使用索引而进行全表扫描;

这里写图片描述

2、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,即使其中有条件带索引也不会使用,这也是为什么尽量少用 or 的原因; 

这里写图片描述

3、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引;

这里写图片描述

4、like的模糊查询以 % 开头,索引失效; 

这里写图片描述

5、避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描;

如:

select id from t where num/2 = 100

应改为:

select id from t where num = 100*2;

 

6、尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描;

例如:

select id from t where substring(name,1,3) = 'abc' – name;

以abc开头的,应改成:

select id from t where name like ‘abc%’

7、不适合键值较少的列(重复数据较多的列) 

8、不要在 where 子句中的 “=” 左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引;

9、如果MySQL估计使用全表扫描要比使用索引快,则不使用索引;