2013년 8월 3일 토요일

[oracle hint]ACCESS 경로를 변경하는 힌트(INDEX) , 오라클,자바,교육,강좌

ACCESS 경로를 변경하는 힌트(INDEX)


구로디지털 오엔제이프로그래밍실무교육센터


이 힌트는 생긴 그대로 테이블에 있는 인덱스를 사용할 수 있도록 해주는 구문 입니다. 비트맵 인덱스에 대해서는 사용이 가능하지만 INDEX_COMBINE 힌트를 쓰는 것이 맞구요

사용법은 다음과 같습니다.

[형식]

[]

SQL> select index_name, table_name from user_indexes
  2  where table_name = 'MYEMP1';

INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
IDX_MYEMP1_DEPTNO              MYEMP1
SYS_C0011302                   MYEMP1


인덱스가 있는 경우 where 절에 인덱스 컬럼이 보이면 오라클이 알아서 인덱스를 경유하여 데이터를 추출 한다.

SQL> select count(*) from myemp1
  2  where deptno = 2;

  COUNT(*)
----------
   2000000

   : 00:00:00.75
--------------------------------------------------------------------|   0 | SELECT STATEMENT  |                   |     1 |     2 |  3867   (1)|
|   1 |  SORT AGGREGATE   |                   |     1 |     2 |            |
|*  2 |   INDEX RANGE SCAN| IDX_MYEMP1_DEPTNO |  2000K|  3906K|  3867  


이번에는 인덱스를 숨겨보자. 숨긴 후 실행하면 9초 정도 걸린다.

SQL> alter index IDX_MYEMP1_DEPTNO invisible;

인덱스가 변경되었습니다.

SQL> select count(*) from myemp1
  2  where deptno = 2;

  COUNT(*)
----------
   2000000

   : 00:00:09.93

Execution Plan
----------------------------------------------------------
|   0 | SELECT STATEMENT   |        |     1 |     2 | 16966   (1)| 00:03:24 |
|   1 |  SORT AGGREGATE    |        |     1 |     2 |            |          |
|*  2 |   TABLE ACCESS FULL| MYEMP1 |  2000K|  3906K| 16966   (1)|


다시 인덱스 보이도록 설정.

SQL> alter index IDX_MYEMP1_DEPTNO visible;

인덱스가 변경되었습니다.


Index 힌트만 사용한다면 오라클은 적절한 인덱스를 알아서 찾아 경유한다.
SQL>  select /*+ index */
  2          count(*)
  3    from myemp1
  4   where deptno = 2;

  COUNT(*)
----------
   2000000

   : 00:00:00.11

Execution Plan
----------------------------------------------------------
|   0 | SELECT STATEMENT  |                   |     1 |     2 |  3867   (1)|
|   1 |  SORT AGGREGATE   |                   |     1 |     2 |            |
|*  2 |   INDEX RANGE SCAN| IDX_MYEMP1_DEPTNO |  2000K|  3906K|  3867  


만약 테이블 명 다음에 인덱스 명을 여러 개 나열한다면 오라클 서버의 Optimizer는 적정한 인덱스를 찾아 실행 계획을 수립합니다.



댓글 없음:

댓글 쓰기