索引失效

成功就是每天进步一点点。
—— 吉姆·罗恩

  • 当我们使用左或左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引实效;
  • 当我们在查询条件中对索引列使用函数,就会导致索引实效;
  • 当我们在查询条件中对索引列进行表达式计算,也是无法走索引的;
  • MySQL在遇到字符串和数据比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列就会发生隐式类型转换,由于隐式类型转换时通过CAST函数实现的,等同于对索引列使用了函数,所以就会导致索引实效;
  • 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引实效;
  • 在WHERE子句中,如果在OR前的条件列是索引列,而在OR后的条件列不是索引列,那么索引就会实效;

使用 like %x,索引一定会失效吗?

使用左模糊匹配并不一定会走全表扫描,关键还是看数据表中的字段。

如果数据库表中的字段只有主键+二级索引,那么即使使用了左模糊匹配,也不会走全表扫描(type = all),而是走全扫描二级索引树(type = index)

联合索引要遵循最左匹配才能走索引,但是如果数据库表中的字段都是索引的话,即使查询过程中,没有遵循最左匹配原则,也是走全扫描二级索引树(type = index)

posted @ 2025-04-03 10:47  Tsukinor  阅读(14)  评论(0)    收藏  举报