2013년 8월 3일 토요일

ㅍ[ORACLE Hint, 오라클 힌트강좌]ACCESS 경로를 변경하는 힌트(ROWID) ,오라클자바교육,오라클교육

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



댓글 없음:

댓글 쓰기