mysql 索引失效

1.查询条件包含or

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

   当or左右查询字段只有一个是索引,该索引失效,explain执行计划key=null;只有当or左右查询字段均为索引时,才会生效;

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

 3.like 以%开头:使用like模糊查询,当%在前缀时,索引失效:

    当前缀没有%,后缀有%时,索引有效;

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

 

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

独立的列(对列变量需要计算(聚合运算、类型转换等))

  独立的列是指索引列不能是表达式的一部分,也不是是函数的参数。例如以下两个查询无法使用索引:

  1)表达式:  select actor_id from sakila.actor where actor_id+1=5;

  2)函数参数:select ... where TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col)<=10;应该把列计算转换成常量计算。

不使用NOT IN和<>操作
  NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。

 

posted on 2019-09-16 20:33  溪水静幽  阅读(266)  评论(0)    收藏  举报