정의
소트 머지 조인(Sort Merge Join)은 두 테이블을 각각 조인 컬럼 기준으로 정렬한 다음, 두 집합을 머지(Merge)하면서 조인을 수행함
동작
1.소트 단계: 양쪽 집합을 조인 컬럼 기준으로 정렬함
2.머지 단계: 정렬된 양쪽 집합을 서로 머지(Merge)함
사용법
select /*+ ordered use_merge(t2) */ *
from t1, t2
where t1.c1 = t2.c1
소트 머지 조인의 유용
(1) First 테이블에 소트 연산을 대체할 인덱스가 있을 때
- 해시 조인과 마찬가지로, 한쪽 집합(Second 테이블)은 전체범위를 처리하고
다른 한쪽(First 테이블)을 일부만 읽고 멈추도록 할 수 있음
- First 테이블 조인 컬럼에 인덱스가 있을 때 가능
- OLTP성 업무에서 소량의 테이블과 대량의 테이블을 조인할 때, 소트 머지 조인을 유용하게 사용할 수 있음
- 소트 머지 조인에서 인덱스를 이용해 소트 연산을 대체할 수 있는 대상은 First 테이블에만 국한됨
- Second 테이블 조인 컬럼에 대한 인덱스를 이용함에도 Sort Join 오퍼레이션이 나타남.
- First 테이블은 이미 정렬된 인덱스를 사용할 것이므로 그대로 두고, 먼저 Second 집합 테이블을 읽어 정렬한 결과를 Sort Area에 담음
- 조인 연산을 진행할 때는 First 집합 테이블의 인덱스부터 읽기 시작함
- 소트 머지 조인도 부분적으로 부분범위처리가 가능함
Second 테이블은 항상 정렬을 수행하므로 전체범위처리가 불가피하지만, First 테이블만큼은 중간에 읽다가 멈출 수 있음
- Second 테이블은 조인 컬럼에 인덱스가 있더라도 정렬을 수행함
(2) 조인할 First 집합이 이미 정렬돼 있을 때
- First 집합이 정렬돼 있을 때만 소트 연산이 생략됨,
Second 집합은 설사 정렬돼 있더라도 Sort Join 오퍼레이션을 수행함
(3) 조인 조건식이 등치(=) 조건이 아닐 때
- 해시 조인은 조인 조건식이 등치(=) 조건일 때만 사용할 수 있지만
소트 머지 조인은 등치 조건이 아닐 때도(between, <, <=, >, >=) 사용될 수 있음