索引失效的情况

  • 不等于(!= 或者<>)索引失效
  • is null 可以使用索引, is not null 无法使用索引
  • 左模糊, 或全模糊的 like 匹配
    • 左模糊可以通过加一个镜像字段转化成右模糊
    • 如果数据库表中的字段只有主键+二级索引, 那么即使使用了左/全模糊匹配,也不会走全表扫描(type=all),而是走全扫描二级索引树(type=index), 这个时候就是索引覆盖了
  • 对索引做了表达式计算; 使用了函数
    • 可以使用函数索引
  • 索引列比较的时候发生隐式类型转换
    • 在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较
  • 联合索引没有满足最左匹配
  • where 里面存在 or, 只要有条件列不是索引列, 就会失效
  • 具体还要看explain的输出

See Also