Optimizing Oracle Optimizer (2011년)
Simple Predicate Pushing 0 0 2,519

by 구루비스터디 Transformation Predicate Pushing [2018.07.14]


Simple Predicate Pushing

  • Simple Predicate Pushing은 Pushing 이 쉬운 Predicate을 의미


select /*+ gather_plan_statistics */
  t1.c1, v.c2
from
  t1, 
  (select t2.c1 as c1, t2.c2 as c2, t2.c3 as c3,
        max(t3.c3) as max_key
    from t2, t3
    where t2.c1 = t3.c1
    group by t2.c1, t2.c2, t2.c3
    order by t2.c1, t2.c2) v
where
  t1.c1 = v.c1 and
  v.c3 = 1
; 

Execution Plan
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=13 Card=10 Bytes=400)
   1    0   HASH JOIN (Cost=13 Card=10 Bytes=400)
   2    1     VIEW (Cost=7 Card=10 Bytes=270)
   3    2       SORT (ORDER BY) (Cost=7 Card=10 Bytes=640)
   4    3         HASH (GROUP BY) (Cost=7 Card=10 Bytes=640)
   5    4           HASH JOIN (Cost=6 Card=10 Bytes=640)
   6    5             TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=3 Card=10 Bytes=380)
   7    5             TABLE ACCESS (FULL) OF 'T3' (TABLE) (Cost=2 Card=100 Bytes=3K)
   8    1     INDEX (FAST FULL SCAN) OF 'T1_N1' (INDEX) (Cost=6 Card=10K Bytes=127K)

8 - ACCESS PREDICATES "T1"."C1"="V"."C1"
9 - ACCESS PREDICATES "T2"."C1"="T3"."C1"

7 - FILTER PREDICATES "T2"."C3"=1


  • 2번 단계엇 View Operation으로 부터 View Merging이 실패한 것을 알 수 있음.
  • 7번 단계에 View 밖에 있는 "T2"."C3"=1 조건이 Pushing 된 것을 알 수 있는데 이것을 Simple Predicate Pushing 이라함
  • 책에서는 NL로 풀렸음.
  • no_push_pred 힌트를 사용하여도 Predicate Pushing 이 작동한다.
  • Simple Predicate Pushing은 no_push_pred 나 _pred_move_around parameter를 false로 변경하여도 동작함
"데이터베이스 스터디모임" 에서 2009년에 "OPTIMIZING ORACLE OPTIMIZER " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3928

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입