索引的失效

1.6、索引有失效的時候,什麼時候失效呢?(重要)

  (失效1)select * from emp where ename like 『%T』;

  

 

 

   type = ALL

  ename上即使添加了索引,也不會走所引,為什麼?

  原因是模糊匹配中以「%」開始

  盡量避免模糊查詢時以”%”開始

  這是一種優化的手段/策略

  (失效2)
    使用or的時候會失效,如果使用or那麼要求or兩邊的條件欄位都要有索引,才會走索引,如果其中一邊有一個欄位沒索引,

    另一個欄位上的索引也會失效。這就是為什麼不建議使用or的原因。

    案例:explain select * from emp where ename = 『KING』 or job = ‘MANAGER’;  //這種情況可以採用union的方式

      

 

 

     type = ALL

  (失效3)

    使用 複合索引的時候,沒有使用左側的列查找,索引失效

    什麼是複合索引:兩個欄位或更多的欄位聯合起來添加一個索引

    create index emp_job_sal_index on emp(job,sal);

    explain select *from emp where job = ‘MANAGER’;

    

 

 

 

    explain select *from emp where sal = 800;

    

 

 

   (失效4)

    在where中索引列參加了數學運算,索引失效

    create index emp_sal_index on emp(sal);

    explain select * from emp where sal+1 = 800;//欄位參加了運算

  

    

 

 

   (失效5)

      在where中索引列使用了函數

    explain select * from emp where lower(ename) = ‘smith’;

      

 

    (失效情況很多)。。。。

Tags: