MySQL索引失效

 

OR:

  查询条件包含or时,可能会导致索引失效

  只有当or左右查询字段均为索引时,才会生效

 

组合索引:

  组合索引,不是使用第一列索引,索引失效

 

  下面是一些例子,假设索引是(col1, col2, col3),那么:

  ...where col1 = 1 order by col2, col3;(√)
  ...where col1 = 1 order by col2;(√)
  ...where col1 > 1 order by col1, col2;(√)

  ...where col1 > 1 order by col2, col3;(X) // Order By必须出现索引中的第1个字段
  ...where col1 = 1 order by col2 desc, col3 asc;(X)  //Order By中三个字段的排序方向必须相同,否则会导致索引失效
  ...where col1 = 1 order by col2, col4;(X)
  ...where col1 = 1 order by col3;(X)
  ...where col1 = 1 and col2 in(1,3) order by col3;(X)


 

 

不能继续使用索引中范围条件(bettween、<、>、in等)右边的列

 

like 以%开头:

  使用like模糊查询,当%在前缀时,索引失效,如‘%123’

  当前缀没有%,后缀有%时,索引有效,如‘123%’

 

如何列类型是字符串,where时一定用引号括起来,否则索引失效:

  where a = 123 ,索引失效

  where a = ‘123’ ,索引有效

 

当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效

 

在索引列上做计算,或者使用函数,索引失效

 

where 子句中有is null ,is not null 也无法使用索引:

  如where a is null

 

where 子句中使用!=,<> 也无法使用索引

 

posted @ 2018-05-24 15:17  __Meng  阅读(578)  评论(0编辑  收藏  举报