1、联合索引,查询条件没有联合索引的第一列。
2、在包含有null值的table列上建立索引,当时使用select count(*) from table时不会使用索引。
3、在索引列上使用函数时不会使用索引,如果一定要使用索引只能建立函数索引。
Where条件中对字段增加处理函数将不使用该列的索引
select * from emp where to_char(hire_date,’yyyymmdd’)=’20080411′ (不使用)
select * from emp where hire_date = to_char(‘20080411′,’yyyymmdd’) (使用)
4、当被索引的列进行隐式的类型转换时不会使用索引。
select * from t where indexed_column = 5,而indexed_column列建立索引但类型是字符型
5、使用 IS NULL 和 IS NOT NULL
SELECT … FROM emp WHERE comm IS NULL; comm 列的索引会失效
6、使用 LIKE ‘%T’ 进行模糊查询,要走索引,like的后面不能以%开头
7、WHERE 子句中使用不等于操作
不等于操作包括:<>, !=, NOT colum >= ?, NOT colum <= ?
对于这个限制条件可以通过 OR 替代,例如: colum <> 0 ===> colum>0 OR colum<0
8、等于和范围索引不会被合并使用
SELECT emp_id, emp_m, salary_q … FROM emp WHERE job=’manager’ AND deptno>10
job 和 deptno 都是非唯一索引,这种条件下 oracle 不会合并索引,它只会使用第一个索引。