조인 컬럼에 적당한 인덱스가 있어서 자연조인이 효율적일 때 유용하다.
Driving Table의 조인 데이터 양이 큰 영향을 주는 조인 방식이다.
[dept 테이블 index 정보]
pk_dept : deptNo
[emp 테이블 index 정보]
pk_emp : empNo
idx_emp : deptNo
[SQL]
SELECT *
FROM dept d
WHERE d.deptNo = 'A001'
AND EXISTS (SELECT 'X' FROM emp e WHERE d.deptNo = e.deptNo)
=> NESTED LOOP SEMI JOIN
: index 정보를 볼 때 HASH 보다는 NL JOIN이 나타날 가능성이 크며, EXISTS 절은 주로 SEMI JOIN으로 나타난다.
: Sort Merge Join은 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행한다.
Sort Merge Join은 랜덤 액세스로 NL Join에서 부담이 되던 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법이다.
Driving Table 개념 중요치 않다.
인덱스를 사용하지 않기 때문에 조인 조건의 인덱스의 유무에 영향을 받지 않는다.
[단점]
: 조인컬럼의 인덱스를 사용하지 않기 때문에 조인 컬럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 조인 기법이다.
[NL Join]
[Sort Merge Join, Hash Join]
조인 컬럼에 적당한 인덱스가 없어서 NL 조인이 비효율적인 경우
자연조인 시 driving 집합 쪽으로 조인 액세스량이 많아 Random Access 부하가 심할 경우
[Hash Join]