Oracle Hint, Tuning
Optimizer Mode를
변경하는 힌트
(CHOOSE)
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
2.4 Optimizer Mode를 변경하는 힌트
CHOOSE
CHOOSE 힌트는 테이블에 통계 정보가 존재한다면 CBO(COST BASED OPTIMIZER)의
ALL_ROWS로 동작을 하고 통계정보가 없다면 RBO(RULE-BASED OPTIMIZER)로 동작한다. CBO
의 ALL_ROWS는 비용 기반 옵티마이저 환경에서 SQL문의 WHERE 조건을 만족하는 모든 행을
가장 빠르게 검색하는 실행 계획을 유도하며 RBO인 경우 15개 규칙에 기반한 실행계획을 수립
한다. (ORACLE 11g 이후 더 이상 지원하지 않지만 여전히 사용은 가능하다.)
-- SQL문장의 실행결과는 보이지 말고 실행계획만 보이도록 함
SQL> set autotrace trace explain
-- 테이블 통계정보 생성
SQL> ANALYZE TABLE myemp1 COMPUTE STATISTICS;
SQL> ANALYZE TABLE mydept1 COMPUTE STATISTICS;
-- 현재 두 테이블 모두 통계정보가 생성되어 있다.
SQL> SELECT /*+ CHOOSE */
e.empno, d.dname
FROM MYEMP1 E, MYDEPT1 D
WHERE E.DEPTNO = D.DEPTNO;
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
Execution Plan
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10M| 190M| 25261 (1)| 00:05:04 |
|* 1 | HASH JOIN | | 10M| 190M| 25261 (1)| 00:05:04 |
| 2 | TABLE ACCESS FULL| MYDEPT1 | 7 | 84 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| MYEMP1 | 10M| 76M| 25187 (1)| 00:05:03 |
------------------------------------------------------------------------------------------
-- 기존에 생성된 통계정보 삭제
SQL> ANALYZE TABLE myemp1 DELETE STATISTICS;
SQL> ANALYZE TABLE mydept1 DELETE STATISTICS;
-- RBO로 동작한다.
SQL> SELECT /*+ CHOOSE */
e.empno, d.dname
FROM MYEMP1 E, MYDEPT1 D
WHERE E.DEPTNO = D.DEPTNO;
Execution Plan
-------------------------------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | NESTED LOOPS | |
| 3 | TABLE ACCESS FULL | MYDEPT1 |
|* 4 | INDEX RANGE SCAN | IDX_MYEMP1_DEPTNO |
| 5 | TABLE ACCESS BY INDEX ROWID| MYEMP1 |
----------------------------------------------------------------------------

2.4 optimizer mode를 변경하는 힌트(choose)

  • 1.
    Oracle Hint, Tuning OptimizerMode를 변경하는 힌트 (CHOOSE)
  • 2.
    Oracle Hint, Tuning_Optimizer Mode 변경 힌트 2.4 Optimizer Mode를 변경하는 힌트 CHOOSE CHOOSE 힌트는 테이블에 통계 정보가 존재한다면 CBO(COST BASED OPTIMIZER)의 ALL_ROWS로 동작을 하고 통계정보가 없다면 RBO(RULE-BASED OPTIMIZER)로 동작한다. CBO 의 ALL_ROWS는 비용 기반 옵티마이저 환경에서 SQL문의 WHERE 조건을 만족하는 모든 행을 가장 빠르게 검색하는 실행 계획을 유도하며 RBO인 경우 15개 규칙에 기반한 실행계획을 수립 한다. (ORACLE 11g 이후 더 이상 지원하지 않지만 여전히 사용은 가능하다.) -- SQL문장의 실행결과는 보이지 말고 실행계획만 보이도록 함 SQL> set autotrace trace explain -- 테이블 통계정보 생성 SQL> ANALYZE TABLE myemp1 COMPUTE STATISTICS; SQL> ANALYZE TABLE mydept1 COMPUTE STATISTICS; -- 현재 두 테이블 모두 통계정보가 생성되어 있다. SQL> SELECT /*+ CHOOSE */ e.empno, d.dname FROM MYEMP1 E, MYDEPT1 D WHERE E.DEPTNO = D.DEPTNO;
  • 3.
    Oracle Hint, Tuning_Optimizer Mode 변경 힌트 Execution Plan ------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 10M| 190M| 25261 (1)| 00:05:04 | |* 1 | HASH JOIN | | 10M| 190M| 25261 (1)| 00:05:04 | | 2 | TABLE ACCESS FULL| MYDEPT1 | 7 | 84 | 3 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL| MYEMP1 | 10M| 76M| 25187 (1)| 00:05:03 | ------------------------------------------------------------------------------------------ -- 기존에 생성된 통계정보 삭제 SQL> ANALYZE TABLE myemp1 DELETE STATISTICS; SQL> ANALYZE TABLE mydept1 DELETE STATISTICS; -- RBO로 동작한다. SQL> SELECT /*+ CHOOSE */ e.empno, d.dname FROM MYEMP1 E, MYDEPT1 D WHERE E.DEPTNO = D.DEPTNO; Execution Plan ------------------------------------------------------------------------- | Id | Operation | Name | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | | 2 | NESTED LOOPS | | | 3 | TABLE ACCESS FULL | MYDEPT1 | |* 4 | INDEX RANGE SCAN | IDX_MYEMP1_DEPTNO | | 5 | TABLE ACCESS BY INDEX ROWID| MYEMP1 | ----------------------------------------------------------------------------