# 索引失效

什么时候索引会失效?

第一种情况:
 select * from t_user where name like '%z';

 因为模糊匹配中以 '%' 开头了,索引失效(存在索引,但不走索引)


第二种情况:
 使用or的时候会失效,如果使用or,那么要求or两边字段条件都要有索引,才会走索引。如果其中一边有一个字段没有索引,那么另一个字段上的索引也会失效


第三种情况:
 使用复合索引的时候,没有使用左侧的列查找,索引失效( 最左原则 )
 create index emp_job_sal_index on emp(job, sal);

 explain select * from emp where job = 'MANAGER';// 走索引
 explain select * from emp where sal = 1000;// 索引失效


第四种情况:
 在where当中,索引参与了数学运算,索引失效

 create index emp_sal_index on emp(sal);

 explain select * from emp where sal = 800;// 走索引
 explain select * from emp where sal = 800 + 100;// 走索引

 explain select * from emp where sal + 100 = 800;// 索引失效


第五种情况:
 在where当中,索引列使用了函数,索引失效

 create index emp_ename_index on emp(ename);

 explain select * from emp where ename = 'SIMTH';// 走索引

 explain select * from emp where lower(ename) = 'simth';// 索引失效


第六种情况:....
第七种情况:....
...



索引是数据库优化的重要手段,优化的时候,优先考虑的因素就是索引。

索引分类:
单一索引:
复合索引:
主键索引:
唯一性索引:

注意:唯一性比较弱的字段上添加索引用处不大。(可能存在大量重复数据,这个时候索引起不到什么作用,越唯一,效率越高)