# 索引失效
什么时候索引会失效?
第一种情况:
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';// 索引失效
第六种情况:....
第七种情况:....
...
索引是数据库优化的重要手段,优化的时候,优先考虑的因素就是索引。
索引分类:
单一索引:
复合索引:
主键索引:
唯一性索引:
…
注意:唯一性比较弱的字段上添加索引用处不大。(可能存在大量重复数据,这个时候索引起不到什么作用,越唯一,效率越高)