BLOG main image
Google
분류 전체보기 (27)
잡념 (3)
오라클 (22)
떨어진 파티션의 그룹별 일련번..
느낌 표현 그리고 소통
복제를 이용한 신규 row 생성
느낌 표현 그리고 소통
oracle number type 변환
느낌 표현 그리고 소통
10,774 Visitors up to today!
Today 1 hit, Yesterday 3 hit

daisy rss
tistory 티스토리 가입하기!
2007/11/15 20:33

9i 까지는 진실이었는데 10g 부터 미신이 된 케이스입니다.
아래 SQL 과 trace 결과를 보시죠.

select count(ename), count(loc)
from   dept d, big_emp e
where  e.deptno = d.deptno(+)

Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.002          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        2    0.656        0.764        234        238          0          1
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        4    0.656        0.765        234        238          0          1

Misses in library cache during parse: 1
Optimizer goal: ALL_ROWS
Parsing user: SCOTT (ID=60)

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
      1   SORT AGGREGATE (cr=238 pr=234 pw=0 time=763588 us)
  38416    HASH JOIN RIGHT OUTER (cr=238 pr=234 pw=0 time=645634 us)
      5     TABLE ACCESS FULL DEPT (cr=7 pr=6 pw=0 time=15960 us)
  38416     TABLE ACCESS FULL BIG_EMP (cr=231 pr=228 pw=0 time=206029 us)

이상한 점을 발견하셨나요?

(+) 기호가 붙은 dept 테이블 즉 small table 이 먼저 드라이빙된다는 것입니다.

hash join 의 경우 드라이빙되는 테이블의 크기가 작아야 성능이 좋아지는데
outer join 의 경우 (+) 기호가 붙으면 항상 드라이빙되지 않았던 게 9i 까지의 동작이었습니다.

10g 의 경우 RIGHT OUTER JOIN 방식으로 작은 테이블을 먼저 드라이빙할 수 있도록 변경되었습니다.
Nested Loop Join 의 경우는 여러분이 테스트해 보세요.

ProDBA Cafe 에도 동일한 내용을 올립니다.

Trackback Address :: http://sciphil.tistory.com/trackback/62 관련글 쓰기
sunny | 2007/12/07 14:02 | PERMALINK | EDIT/DEL | REPLY
잘 보았습니다.
간단한 예제여서 실행해 봤는데 저는 의외로 다른 답이 나왔습니다.
emp row count : 8
dept row count : 4
인데 driving table을 emp로 잡더군여... 작아서 그런가..ㅜㅜ
sunny | 2007/12/07 15:05 | PERMALINK | EDIT/DEL | REPLY
아,,참,,DEPT(+) 였구여..
BlogIcon sciphil | 2007/12/10 20:50 | PERMALINK | EDIT/DEL | REPLY
row 수가 작으면 거의 한 block에 모두 저장되어 일반적인 hash outer join 의 cost 나 hash right outer join 의 cost 나 별 차이가 없을 겁니다.
big_emp 를 만들어서 테스트해 보세요.
Name
Password
Homepage
Secret
prev"" #1 #2 #3 #4 #5 #6 #7 ... #27 next