MySQL索引失效

在索引列上进行操作

在索引列上进行以下操作(不局限于次)时,索引会失效,

  1. 大于小于等于判断 > < >= <=
  2. 函数逻辑处理
  3. 范围条件判断 in
  4. 非相等判断 !=
  5. 是否为null判断 is null is not null
  6. 是否存在not in not exist

OR关键字的失效情况

单个OR关键字的左右两个条件中,如果只有一个命中索引,则索引失效;当所有OR的条件都命中索引的时候,才会使用索引;

联合索引的失效情况

遵循最左前缀原则,即在建立索引时选择的第一个列存在与SQL条件语句中,才会命中索引,仅命中联合索引其他列时并不会触发索引查询;

Like关键字的失效情况

Like关键字在前匹配(%开头)的时候需要进行全表扫描,索引失效;

列类型不匹配

MySQL可以在处理字符串时使用数字类型进行比较,如定义一个name列为字符类型,WHERE name=’123’;查询结果等同于WHERE name=123;但是后者因为类型不匹配索引失效;

特殊情况

如果全表扫描的速度大于使用索引,会使用全表扫描进行查询,在表数据极少的情况下经常发生;