OPT ESTIMATE

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 기본 정보

[편집] Hint 명

OPT_ESTIMATE

[편집] Syntax

/*+ OPT_ESTIMATE(query_block_name, operation[, ...], options) */

[편집] 지원

10g~


[편집] 상세 설명

OPT_ESTIMATE 힌트는 Oracle 10g의 SQL Tuning Advisor에 의해 사용된다. SQL Tuning Advisor는 기존 쿼리에 OPT_ESTIMATE 힌트를 적용함으로써 원하는 실행 계획을 수립한다. OPT_ESTIMATE 힌트는 CARDINALITY 힌트에 비해 훨씬 다양한 기능을 제공한다. 따라서 기존에 사용하던 CARDINALITY를 대신해서 사용할 수 있다. 자세한 내용은 아래 예제를 참조한다.

한가지 주의할 것은 OPT_ESTIMATE 힌트와 CARDINALITY 힌트 모두 Undocumented Hint, 즉 Oracle이 공식적으로 지원하지 않는 힌트라는 것이다. 즉 아무런 예고없이 없어지거나 사용법이 바뀔 수 있다.


[편집] 사용 예제

explain plan for
select
  *
from t1
where c1 = :b1
;
--------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       |     1 |     5 |     2   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID| T1    |     1 |     5 |     2   (0)|
|*  2 |   INDEX RANGE SCAN          | T1_N1 |     1 |       |     1   (0)|
--------------------------------------------------------------------------

-- 예측 로우수를 1000배로 확대
explain plan for
select /*+ opt_estimate(table, t1, scale_rows=1000) */
  *
from t1
where c1 = :b1
;
--------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       |  1000 |  5000 |     2   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID| T1    |  1000 |  5000 |     2   (0)|
|*  2 |   INDEX RANGE SCAN          | T1_N1 |     1 |       |     1   (0)|
--------------------------------------------------------------------------
 

 explain plan for
 select
   *
 from 
   t2, (select * from t1) v
 where
   t2.c1 = v.c1 and
   t2.c2 = :b2 and
   v.c1 = :b1
 ;
   
----------------------------------------------------------------------------
| Id  | Operation                     | Name  | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |       |     1 |    11 |     3   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID  | T1    |     1 |     5 |     1   (0)|
|   2 |   NESTED LOOPS                |       |     1 |    11 |     3   (0)|
|*  3 |    TABLE ACCESS BY INDEX ROWID| T2    |     1 |     6 |     2   (0)|
|*  4 |     INDEX RANGE SCAN          | T2_N1 |     1 |       |     1   (0)|
|*  5 |    INDEX RANGE SCAN           | T1_N1 |     1 |       |     0   (0)|
----------------------------------------------------------------------------

-- 조인 결과 수를 1000배로 확대
explain plan for
select
  /*+ opt_estimate(join, (t2, v), scale_rows=100000) */
  *
from 
  t2, (select /*+ no_merge */ * from t1) v
where
  t2.c1 = v.c1 and
  t2.c2 = :b2 and
  v.c1 = :b1
;

----------------------------------------------------------------------------- 
| Id  | Operation                      | Name  | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |       |  1000 | 32000 |     4   (0)|
|*  1 |  TABLE ACCESS BY INDEX ROWID   | T2    |     1 |     6 |     2   (0)|
|   2 |   NESTED LOOPS                 |       |  1000 | 32000 |     4   (0)|
|   3 |    VIEW                        |       |     1 |    26 |     2   (0)|
|   4 |     TABLE ACCESS BY INDEX ROWID| T1    |     1 |     5 |     2   (0)|
|*  5 |      INDEX RANGE SCAN          | T1_N1 |     1 |       |     1   (0)|
|*  6 |    INDEX RANGE SCAN            | T2_N1 |     1 |       |     1   (0)|
-----------------------------------------------------------------------------

 

[편집] 관련 정보

  1. CARDINALITY 힌트