索引的失效
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’;
(失效情況很多)。。。。