04. 조인 순서의 중요성

h5.필터 조건이 없을 때

   
   select /*+ leading(b) use_nl(a) */ a.납입방법, b.*
     from 납입방법 A, 고객 B
    where B.납입방법코드 = A.납입방법코드;


select /*+ leading(a) use nl(b) */ a.납입방법, b.*
from 납입방법 a, 고객 b
where b.납입방법코드  = a.납입방법코드

다른 필터 조건이 없는 상황에서는 작은 쪽 집합을 드라이빙 하는 것이 유리함을 알 수 있다.

h5.필터 조건이 없을 때


select /*+ leading(b) use nl(a) */ a.납입방법명, b.*
from 납입방법 a, 고객 b,
where b.납입방법코드 = a.납입방법코드
and b.거주지역 = '부산'


select /*+ leading(a) use_nl(b) */ a.납입방법명,b.*
from 납입방법 a, 고객 b
where b.납입방법코드 = a.납입방법코드
and b.거주지역 = '부산'

h5.인덱스에 거주지역 컬럼 추가


select /*+ leading(a) use nl(b) */ a.납입방법명,b.*
from 납입방법 a, 고객 b
where b.납입방법코드 = a.납입방법코드
and b. 거주지역 = '부산'

조인 조건 외에 필터 조건이 있을 때는 인텍스 구성에 따라 유- 불리가 결정되며, 비효율이 없게끔 인텍스를 잘 구성해 주기만 한다면 역시 작은 쪽 집합을 드라이빙하는 것이 유리하다.

h5.소트 머지 조인과 해시 조인의 경우

소트 머지 조인

-PGA상에 정렬된 집합을 통해 조인 액세스가 일어나기 때문에 Random 액세스 발생량보다는 소트 부하에 의해 성능이 결정
-Disk Sort가 발생할 정도의 큰 테이블을 포함할 때는 큰 테이블을 드라이빙 하는 것이 빠름
-Memory Sort 발식으로 조인할 때는 작은 쪽 테이블을 드라이빙 하는 것이 조금 더 빠름

해시조인
-Hash Area에 Build Input(선행집합)을 모두 채울 수가 있느냐가 관건이므로 작은 쪽 테이블 드라이빙이 유리