where 절에 다음과 같은 검색조건이 있으면 인덱스를 엑세스 하지 못합니다.

  1. is null이나 is not null
  2. like 검색시 와일드 카드 (%)를 앞에 사용한 경우
  3. 부정 연산자(! =, <>,^=) 를 사용한 경우
  4. 인덱스 컬럼을 가공했을 때

실습 예제1. 커미션이 null인 사원들의 이름과 커미션을 출력하시오!

create index emp_comm on emp(comm);

select ename, comm
from emp
where comm is null;

select  * from  table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))

문제 22. 아래 sql을 튜닝하시오

튜닝 전

select ename, comm
from emp
where comm is not null;

튜닝 후

create index emp_comm_nvl on emp(nvl(comm,-1));

select /*+ index emp emp_comm_nvl */ ename, comm
from emp
where nvl(comm,-1)=-1; 

실습 문제2. 이름과 끝자리가 T로 끝나는 사원들의 이름과 월급을 출력하시오!

@demo

create index emp_ename on emp(ename)

select ename, sal
from emp
where ename like '%T'

select  * from  table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));

문제22. 이름의 끝글자가 T로 끝나는 사원들의 이름을 출력하는 sql을 like가 아니라 substr로 작성해서 출력하시오!