SQL에서 두 개 이상의 테이블을 조합할 때 조인(Join) 연산이 사용됩니다. 효율적인 쿼리 성능을 위해 데이터베이스는 상황에 맞는 조인 전략을 자동으로 선택하거나, 명시적으로 힌트를 줄 수 있습니다. 이 글에서는 Nested Loop Join, Sort-Merge Join, Hash Join의 핵심 개념과 특성을 정리합니다.
하나의 테이블(외부 루프)을 기준으로, 다른 테이블(내부 루프)을 반복적으로 탐색하여 매칭되는 데이터를 찾는 방식입니다.
FOR each row in outer_table
FOR each row in inner_table
IF join_condition is true
RETURN row
| 장점 | 단점 |
|---|---|
| 단순한 알고리즘, 비등가 조건 가능 | 큰 테이블에선 성능 저하 가능 |
| 인덱스 활용 가능 | 전체 탐색 비용 큼 (인덱스 없으면) |
두 테이블을 조인 키로 각각 정렬한 후, 병합(Merge)하는 방식입니다. 주로 정렬된 입력에 적합합니다.
| 장점 | 단점 |
|---|---|
| 대용량에 적합 (정렬만 되면 빠름) | 정렬 비용이 크고 메모리 사용 높음 |
| 정렬된 데이터 처리에 효과적 | 비등가 조인 불가 |
한 테이블의 조인 키를 기반으로 해시 테이블을 생성하고, 다른 테이블의 키를 해시 테이블에서 검색하는 방식입니다.
| 장점 | 단점 |
|---|---|
| 인덱스 없이도 빠른 조인 가능 | 메모리 사용량이 큼 |
| 정렬 불필요 | 비등가 조인 불가 |
| 구분 | Nested Loop Join | Sort-Merge Join | Hash Join |
|---|---|---|---|
| 조인 조건 | 등가 / 비등가 모두 가능 | 등가만 | 주로 등가 |
| 인덱스 활용 | O (내부 테이블에 유리) | 필요 없음 | 필요 없음 |
| 정렬 필요 | ✖ | 양쪽 정렬 필요 | ✖ |
| 메모리 사용 | 적음 | 중간 | 많음 |
| 대용량 적합 | ✖ | O | O |
| 구현 복잡도 | 단순 | 중간 | 복잡 |
Nested Loop JoinSort-Merge JoinHash Join