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보다 큰 데이터를 찾는 실행계획을 만들어 냅니다. 어느 방법이 나은지는 곰곰히 생각해 보세요.
댓글 없음:
댓글 쓰기