- **使用“!=”或“<>”操作符:**对索引列使用这些操作符,将遍历全表数据,所以索引会失效。
- **对索引列进行计算或函数操作:**如果在查询时对索引列进行了运算或者使用了函数,那么数据库无法使用该索引。
- **隐式类型转换:**如果查询条件中的数据类型与索引列的数据类型不一致,MySQL会自动进行类型转换,这种情况下索引可能会失效。
- **联合索引未使用最左前缀原则:**在使用联合索引时,如果未按照索引的顺序进行查询,或者未使用到联合索引的第一个字段,那么索引也会失效。
- **like语句以通配符开头:**对于
LIKE
关键字,在使用模糊查询时,如果以'%'开头,则索引会失效而进行全表扫描。 - **NULL值问题:**对含有空值的列进行索引,那么在查询时如果包括NULL值,可能导致索引失效。
- **数据分布不均匀:**当表中某个数据段的值过于集中时(例如性别字段),即使该列建立了索引,优化器也可能不会选择使用它,因为全表扫描的代价可能更低。