[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보다 큰 데이터를 찾는 실행계획을 만들어 냅니다. 어느 방법이 나은지는 곰곰히 생각해 보세요
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - [Hint]Optimizer Mode를 변경하는 힌트 (RULE) (0) | 2012.07.19 |
---|---|
oracle - [Hint]ACCESS 경로를 변경하는 힌트(USE_CONCAT) (0) | 2012.07.19 |
oracle - [Hint]ACCESS 경로를 변경하는 힌트(REWRITE) (0) | 2012.07.19 |
oracle - [Hint]ACCESS 경로를 변경하는 힌트(NO_INDEX) (0) | 2012.07.19 |
oracle - [Hint]ACCESS 경로를 변경하는 힌트(NO_EXPAND) (0) | 2012.07.19 |