虽然数据库设置了索引,但在某些情况下,数据库可能无法使用这些索引来优化查询。以下是几种可能导致索引无法使用的情况:
-
以“%”开头的 LIKE 语句,模糊匹配。
-
OR 语句前后字段没有同时使用索引。
-
不满足最左前缀原则。
-
数据类型出现隐式转换(如 varchar 不加单引号的话可能会自动转换为 int)。
-
where 语句索引列上使用数学运算(例如:where a = a + 1)。
-
where 语句索引列上使用函数运算。
- 表数据量较小时,此时全表扫描不一定比走索引慢,此时索引失效。
不推荐使用索引的情况
- 表数据量小的时候最好不使用索引。
- 频繁更新的字段不要使用索引。
- 数据唯一性差的字段不要使用索引(比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描)。
- where 子句里对索引列使用不等于(<>),使用索引效果一般。
- 字段不在 where 语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引。