2013년 8월 2일 금요일

[oracle hint]ACCESS경로변경힌트(INDEX_COMBINE) , 오라클힌트강좌

 
이 힌트는 비트맵 인덱스에 대해서만 적용 가능한 힌트 입니다예를 들어 EMP 테이블에 대해ename bidx_emp_ename이라는 비트맵 인덱스, deptno bidx_emp_deptno라는 비트맵 인덱스가 생성되어 있다고 할 때 아래와 같이 INDEX_COMBINE이라는 힌트와 테이블 명을 인자로 주게 되면 적절한 비트맵 인덱스를 조합하여 실행 계획을 만들어 내게 됩니다.
 
 
구로디지털 오엔제이프로그래밍실무교육센터
 
 
SELECT
        *
FROM  EMP E
WHERE ename = SMITH
AND   deptno = 10;
 
Execution Plan
-------------------------------------------------------------------
 SELECT STATEMENT Optimizer=CHOOSE 
   TABLE ACCESS (BY INDEX ROWID) OF EMP
   BITMAP CONVERSION (TO ROWIDS)
     BITMAP AND
       BITMAP INDEX (SINGLE VALUE) OF bidx_emp_ename
 BITMAP INDEX (SINGLE VALUE) OF bidx_emp_deptno
 
 
뮬론 힌트 사용시 다음과 같이 테이블명과 비트맵 인덱스 명을 줘도 관계 없습니다.
 
 
또한 INDEX_COMBINE 대신 INDEX 힌트를 이용하여 비트맵 인덱스를 줘도 되지만 비트맵 인덱스라는 경우 알리기 위해 INDEX_COMBINE을 사용하는 것이 좋습니다.
 
[실습]
 
-      실습을 위한 예제 테이블 및 데이터는 아래 링크에서 확인 바랍니다.
 
myemp1 : 1000만건
myemp1_old : 100만건
mydept : 5
 
테스트환경 : oracle 11g
 
 
 
SQL> conn scott/tiger
연결되었습니다.
SQL> set autotrace on explain
SQL> set linesize 120
SQL> set timing on
SQL> create bitmap index bidx_myemp1_deptno on myemp1(deptno);
 
인덱스가 생성되었습니다.
 
SQL> create bitmap index bidx_myemp1_sal on myemp1(sal);
 
인덱스가 생성되었습니다.
 
SQL> SELECT
  2          count(ename)
  3  FROM  MYEMP1 E
  4  WHERE deptno =  1
  5  AND   sal > 800000;
 
COUNT(ENAME)
------------
     1200000
 
   : 00:00:08.84
 
 
-----------------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |        |     1 |    20 | 16990   (1)| 00:03:24 |
|   1 |  SORT AGGREGATE    |        |     1 |    20 |            |          |
|*  2 |   TABLE ACCESS FULL| MYEMP1 |  1200K|    22M| 16990   (1)| 00:03:24 |
-----------------------------------------------------------------------------
 
SQL> 
SELECT
            count(ename)
    FROM  MYEMP1 E
    WHERE deptno =  1
    AND   sal > 800000
    ;
 
COUNT(ENAME)
------------
     1200000
 
경   : 00:00:10.74
-------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                    |     1 |    20 |   124K  (1)| 00:24:59 |
|   1 |  SORT AGGREGATE               |                    |     1 |    20 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID | MYEMP1             |  1200K|    22M|   124K  (1)| 00:24:59 |
|   3 |    BITMAP CONVERSION TO ROWIDS|                    |       |       |            |          |
|   4 |     BITMAP AND                |                    |       |       |            |          |
|*  5 |      BITMAP INDEX SINGLE VALUE| BIDX_MYEMP1_DEPTNO |       |       |            |          |
|   6 |      BITMAP MERGE             |                    |       |       |            |          |
|*  7 |       BITMAP INDEX RANGE SCAN | BIDX_MYEMP1_SAL    |       |       |            |          |
 
비트맵 인덱스를 사용 안 했을 때 성능이 더 좋다.
 
 
 

댓글 없음:

댓글 쓰기