본문 바로가기

프로그래밍/oracle

oracle - [Hint]ACCESS 경로를 변경하는 힌트(ROWID)

반응형

[Hint]ACCESS 경로를 변경하는 힌트(ROWID)
 
 
[Hint]ACCESS 경로를 변경하는 힌트(ROWID)

이 힌트 구문은 ROWID를 이용하여 테이블 스캔이 이루어 지도록 하는 것인데 간단히 예제만 보도록 하겠습니다.

ROWID 힌트를 사용하지 않은 경우 입니다.

SELECT *
FROM emp
WHERE rowid > 'AAAAtkAABAAAFNTAAA'
AND   empno > 0;

Operation        Object Name        Rows        Bytes        Cost        Object Node        In/Out       
SELECT STATEMENT Optimizer Mode=ALL_ROWS                1                   2
  TABLE ACCESS BY INDEX ROWID        SCOTT.EMP        1          40          2          
    INDEX RANGE SCAN        SCOTT.PK_EMP        1                   1                                                     

위의 경우 PK_EMP라는 primary key인덱스를 이용하여 인덱스 영역에서 empno가 0보다 큰 데이터를 추출한 후 이 데이터의 rowid를 이용하여 실제 데이터 영역에서 rowid가 같은 데이터 비교하여 찾은 후 이를 추출하는 형태의 실행 계획을 만들어 냅니다.

이번엔 아래를 볼까요…

SELECT /*+ROWID(emp)*/ *
FROM emp
WHERE rowid > 'AAAAtkAABAAAFNTAAA'
AND   empno > 0;

Operation        Object Name        Rows        Bytes        Cost        Object Node        In/Out
SELECT STATEMENT Optimizer Mode=ALL_ROWS                1                   3
  TABLE ACCESS BY ROWID RANGE        SCOTT.EMP        1          40          3                                                     
이 경우엔 EMP 테이블에서 ROWID가 AAAAtkAABAAAFNTAAA 보다 큰 데이터를 찾은 후 empno가 0보다 큰 데이터를 찾는 실행계획을 만들어 냅니다. 어느 방법이 나은지는 곰곰히 생각해 보세요
 
 
 

반응형