본문 바로가기

프로그래밍/oracle

oracle - [Hint]Optimizer Mode를 변경하는 힌트(FIRST_ROWS)

반응형

[Hint]Optimizer Mode를 변경하는 힌트(FIRST_ROWS)
 
 
Optimizer Mode를 변경하는 힌트(FIRST_ROWS)

처음 로우가 가장 짧은 시간에 추출되도록 실행 계획을 수립하는 힌트 입니다. ALL_ROWS와 비교해 보시기를 바라며 SQL 문장에서 MAX, SUM, COUNT등과 같은 집합 함수를 사용하게 된다면 FIRST_ROWS 힌트는 무시되니 조심하세요~

당연히 FIRST_ROWS 힌트가 제 성능을 발휘하기 위해서는 통계 정보가 생성되어 있어야 합니다.

FIRST_ROWS 힌트는 당연히 하나만 가지고 오면 되니까 Full Table Scan보다는 index scan을 선호할 것이며  Interactive Application인 경우 best response time을 제공할 겁니다. 또한 SORT MERGE JOIN보다는 NESTED LOOP JOIN을 선호합니다.


아래의 예를 참고 하세요~

analyze table scott.emp compute statistics
analyze table scott.dept compute statistics

select /*+FIRST_ROWS */
       e.empno,
           e.ename,
           d.dname
from   scott.emp e, scott.dept d
where  e.deptno = d.deptno       

Operation    Object Name Rows  Bytes  Cost  Object Node In/Out PStart PStop
-------------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=HINT: FIRST_ROWS                14                   4                                                      
  NESTED LOOPS                   14          294          4                                                      
    TABLE ACCESS FULL        SCOTT.EMP        14          140          3                                                      
    TABLE ACCESS BY INDEX ROWID        SCOTT.DEPT        1          11          1                                                      
      INDEX UNIQUE SCAN        SCOTT.PK_DEPT        1                   0
 
 
 
 

반응형