1、对列进行计算或者是使用函数,则该列的索引会失效
如:substring(字段名,1,2)=‘xxx’;
如:select * from test where id-1=9;//错误的写法;
select * from test where id=10; //正确的写法 ;
2、某些情况下的LIKE操作,该列的索引将不起作用。
如:字段名 LIKE CONCAT(‘%’, ‘2014 - 08 - 13’, ‘%’) ;
3、某些情况使用反向操作,该列的索引将不起作用。
如:字段名 <> 2;
4:不匹配数据类型,会造成索引失效
例如表的字段t_number定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效。
如: select * from test where t_number=13333333333; //错误的写法;
select * from test where t_number=‘13333333333’; //正确的写法
5:当B-tree索引 is null不会失效,使用is not null时,会失效,位图索引 is null,is not null 都会失效
6:在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用