ACCESS 경로를
변경하는 힌트(ROWID)
구로디지털 오엔제이프로그래밍실무교육센터
이 힌트
구문은 ROWID를 이용하여 테이블 스캔이 이루어 지도록 하는 것인데 간단히 예제만 보도록
하겠습니다.
ROWID 힌트를 사용하지 않은 경우 입니다.
[테스트환경]
myemp1 : 2000만건
mydept1 : 5건
oracle 11g
-- 먼저 rowid를 알기 위해 데이터 select
SQL>select rowid, empno, sal from myemp1 where rownum <
10
적당한
rowid 값을 입력하여 테스트 하자.
ROWID 힌트를 사용하지 않고 실행하는 경우 index fast full
스캔을 한다.
SQL> select count(empno) from myemp1
2 where rowid >
'AAASUvAAEAAAMarAAA'
3 and empno > 1000;
COUNT(EMPNO)
------------
9999000
경 과: 00:00:01.59
Execution Plan
---------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 17 | 5477
(2)|
| 1 | SORT AGGREGATE | | 1 | 17
| |
|* 2 | INDEX FAST FULL SCAN| SYS_C0011302 | 499K|
8299K| 5477
Myemp1의 empno 인덱스를 이용하여 부분 스캔 후 SORT하여 데이터를 추출 한다.
이번에는
실습을 위해 rowid 힌트를 사용해 보자. 너무 느리다.
SQL> select
2 count(empno) from
myemp1
3 where rowid >
'AAASUvAAEAAAMarAAA'
4 and empno > 1000 ;
COUNT(EMPNO)
------------
9999000
경 과: 00:00:09.93
Execution Plan
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 17 | 16947
(1)|
| 1 | SORT AGGREGATE | | 1 | 17
| |
|* 2 | TABLE ACCESS BY ROWID RANGE| MYEMP1 | 499K|
8299K| 16947
이
경우엔 EMP 테이블에서 ROWID가 'AAASUvAAEAAAMarAAA'보다
큰
데이터를
찾은
후 empno가
1000보다
큰
데이터를
찾는
실행계획을
만들어
냅니다. 어느
방법이
나은지는
곰곰히
생각해
보세요.
댓글 없음:
댓글 쓰기