使用%开头查询

SELECT * FROM t_test WHERE name = "%m";
name字段上虽然添加上了索引,但是因为使用%开头的模糊匹配,所以应该尽量避免模糊查询的使用使用%开头使用,这也算一种优化策略;

使用or

使用or的时候会失效,如果使用or 那么要求or两边的条件字段要有索引才会索引,如果其中一边有一个字段没有索引,那么另一个字段上的索引也会失效。所以这就是为什么不建议使用or的原因。

使用函数

在WHERE当中索引使用了函数
EXPLAIN SELECT * FROM t_test WHERE lower(name) = 'smith';

查询参与运算

在WHERE当中索引列中参与的运算
SELECT * FROM t_test WHERE name = 'smith';

总结

在查询过程中,一切不是直接查询的都会造成索引失败。