소트머지(Sort-merge) 조인은 조인 조건에 따라 두 테이블을 각각 정렬한 후 지퍼처럼 정렬된 두 항목을 결합하는 식으로 수행된다. 소트머지 조인은 많은 점에서 해시 조인과 유사하다. 조인 조건 컬럼만 인덱스로 만드는 것은 소용없고, 한 번에 모든 후보 레코드를 읽을 수 있는 독립적인 조건을 구성하는 컬럼에 대한 인덱스가 필요하다. 조인 순서가 별 의미가 없고 성능에도 영향을 미치지 않는다는 것은 소트머지 조인에만 있는 특징이다. 다른 조인 알고리즘은 외부 조인의 방향(Left나 Right 조인)이 조인 순서를 결정하는데, 소트머지 조인은 그렇지 않다. 소트머지 조인은 동시에 Left와 Right 외부 조인(Full 외부 조인)이 가능하다. 일단 데이터가 정렬되면 소트머지 조인은 좋은 성능을 발휘하지만, 양쪽 데이터를 정렬하는 비용이 크기 때문에 잘 사용하지 않는다. 하지만 정렬 순서대로 만든 인덱스가 있다면 전체 데이터의 정렬을 피할 수 있어 소트머지 조인이 진가를 발휘한다. 반면에 해시 조인은 한쪽만 미리 처리하면 되므로 많을 때는 해시 조인이 훨씬 낫다.
지금까지 조인 알고리즘을 설명한 내용은 다소 이론적이다. 특정한 조인을 수행하도록 강제로 조정이 가능하기는 하다(SQL Server와 오라클에서는 힌트로 처리). 그러나 쿼리 옵티마이저가 알아서 현재 데이터를 기반으로 가장 적합한 조인 방법을 선택하도록 하고 여러분이 생성한 인덱스가 적절한지 확인하는 편이 훨씬 낫다.
Note ≣
MySQL은 해시 조인과 소트머지 조인을 지원하지 않는다.