数据库索引失效的场景
原文链接:https://blog.****.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估计使用全表扫描要比使用索引快,则不使用索引;