본문 바로가기
프로그램이야기/oracle

오라클 인덱스를 사용하지 못하는 경우

by 화난개미 2015. 12. 30.
728x90
반응형

오라클 인덱스를 사용하지 못하는 경우에 대한 쿼리 예시입니다.

 

부정으로 비교하는 경우 : ‘!=’, ‘NOT IN’, ‘NOT LIKE’


     SELECT empno,
              ename,
              job
         FROM emp
        WHERE empno != ‘1234’   

  ==> 해결방법

     SELECT empno,
              ename,
              job
         FROM emp
        WHERE NOT EXIST
            ( SELECT  ‘X’
                FROM emp
               WHERE emono = ‘1234’ )

 

 

 NULL 로 비교하는 경우 : ‘IS NOT NULL’
       SELECT empno,
              ename,
              job
         FROM emp
        WHERE ename IS NOT NULL

    ==> 해결방법 
    SELECT empno, ename, job
       FROM   emp
       WHERE  ename > ‘’

 

 

 인덱스 컬럼에 변형을 가한 경우
     SELECT empno,
              ename,
              job
         FROM emp
        WHERE TO_CHAR(hiredate, ‘YYMMDD’) = ‘990101’
  

 ==> 해결방법

     SELECT empno,
              ename,
              job
         FROM emp
        WHERE hiredate = TO_DATE(‘990101’, ‘YYMMDD’)

 

 

 

 인덱스 적용 원칙의 역이용 (분포도가 안 좋은 경우나 자료가 적은 경우)

       SELECT SUM(col1)
         FROM tab1
        WHERE status = ’90’

 

==> 해결방법 
     SELECT SUM(col1)
         FROM tab1
        WHERE RTRIM(status) = ’90’         [status값의 변형이 일어남으로 Index사용하지 않음]         -> Function Based Index의 경우는 사용함

 

복합(Composite) 인덱스

  : 복합 인덱스인경우 인덱스 컬럼의 첫번째 컬럼에는 조건이 있어야 인덱스를 탈 수 있습니다.
      예) projno, empno가 복합인덱스
 
       SELECT start_date
         FROM assignments
        WHERE projno = 100
        인덱스가 사용됨

 

       SELECT start_date
         FROM assignments
        WHERE projno = 100
          AND empno = 7902
        인덱스가 사용됨

 

       SELECT start_date
        FROM assignments
        WHERE 1=1
        AND empno = 7902
        인덱스가 사용안됨

 

728x90
반응형

댓글