SQL不走索引的可能原因

2018-07-05  本文已影响0人  小石头_

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 不会合并索引,它只会使用第一个索引。

上一篇 下一篇

猜你喜欢

热点阅读