SQL不走索引的可能原因

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

    原文作者:小石头_
    原文地址: https://www.jianshu.com/p/2ffb882fd9d5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞