
1. 중첩 반복 조인 (Nested-Loop Join)
프로그래밍의 이중 반복문(For-Loop)과 유사한 방식으로 동작하며, OLTP(온라인 트랜잭션 처리) 환경에서 주로 활용됩니다.
- 처리 순서: 기준이 되는 선행 테이블(Driving Table)의 처리 범위를 먼저 액세스한 후, 추출된 값을 기준으로 참조 테이블(Driven Table)을 연결합니다.
- 처리 범위 및 접근 방법: 선행 테이블의 추출 결과에 종속되어 후행 테이블의 처리량과 속도가 결정됩니다. 버퍼 크기만큼 부분적으로 결과를 반환하는 부분범위처리가 가능합니다.
- 연결 수단 및 우선순위: 테이블 간 연결 조건의 인덱스 유무가 성능을 좌우합니다. 따라서 데이터량이 적고, 조건을 만족하는 행이 적은 테이블을 선행 테이블로 선택하는 것(우선순위 결정)이 매우 중요합니다.
- 세부 알고리즘 구분:
- 단순 중첩 반복 조인 (Simple Nested-Loop): 인덱스를 사용하지 않으며 선행 테이블의 각 행마다 후행 테이블 전체를 스캔합니다.
- 색인된 중첩 반복 조인 (Indexed Nested-Loop): 후행 테이블의 조인 속성에 인덱스가 존재할 때 사용하며, 선행 테이블의 레코드 값을 통해 후행 테이블의 인덱스를 직접 검색하여 조인합니다. 실무와 시험에서 가장 권장되는 형태입니다.


2. 정렬 병합 조인 (Sort-Merge Join)
조인 칼럼을 기준으로 두 테이블의 데이터를 각각 정렬(Sort)한 후, 정렬된 결과를 바탕으로 조인(Merge)을 수행합니다.
- 처리 순서 및 범위: 두 테이블의 처리 범위를 각자에게 주어진 조건에 의해 독립적으로 검색하고 정렬합니다.
- 접근 방법: 데이터를 모두 읽어 정렬해야 하므로 항상 전체범위처리를 수행합니다. 부분범위처리는 불가능합니다.
- 연결 수단 및 우선순위: 각 테이블이 독립적으로 액세스되고 정렬된 후 병합되므로, 테이블 간의 조인 순서(우선순위)는 성능에 큰 영향을 미치지 않습니다.
- 사용 기준: 조인 칼럼에 인덱스가 없거나, 출력해야 할 결과 데이터가 많아 인덱스 랜덤 액세스의 오버헤드가 클 때 유리합니다. 각자의 처리 범위를 조건절을 통해 사전에 많이 줄일 수 있을 때 효과적입니다.

3. 해시 조인 (Hash Join)
해싱(Hashing) 함수를 이용하여 메모리에 해시 테이블을 생성하고 조인을 수행하는 기법으로, 대용량 데이터 웨어하우스(DW) 환경에서 주로 사용됩니다.
- 처리 순서 및 범위: 데이터가 적은 선행 테이블(Build Input)을 읽어 메모리(Hash Area)에 해시 테이블을 생성한 후, 후행 테이블(Probe Input)을 순차적으로 읽으며 해시 함수를 적용해 조인 대상을 찾습니다.
- 접근 방법 및 연결 수단: 해시 함수를 사용하므로 동등 조인(Equi Join, = 조건)에서만 사용 가능합니다. 인덱스를 전혀 사용하지 않으며, 조인 칼럼 가공 역시 수행 속도에 직접적인 악영향을 미치지 않습니다.
- 우선순위: 메모리(Hash Area)에 해시 테이블을 생성해야 하므로, 반드시 크기가 작은 테이블을 선행 테이블로 선택하는 것이 성능상 유리합니다. (우선순위 매우 중요)
- 사용 기준: 대용량 데이터의 전체범위처리에 탁월한 성능을 보이나, CPU와 메모리 자원에 크게 의존하므로 시스템 자원이 충분할 때 사용해야 합니다.

💡 주요 조인 기법 비교
| 특성 | Nested-Loop Join | Sort-Merge Join | Hash Join |
| 핵심 원리 | 이중 반복문을 통한 순차 접근 | 독립적 조건 검색 후 정렬 및 병합 | 선행 테이블 해시 테이블 생성 후 탐색 |
| 인덱스 의존도 | 매우 높음 (성능 직결) | 낮음 (독립적 정렬 위주) | 없음 (사용 안 함) |
| 처리 방식 | 부분범위처리 가능 | 항상 전체범위처리 | 항상 전체범위처리 |
| 선행 테이블 중요도 | 중요 (데이터량이 적은 것) | 중요하지 않음 (독립적 처리) | 매우 중요 (메모리 제약, 작은 것) |
| 사용 환경 | OLTP (소량 데이터, 랜덤 액세스) | 대량 데이터 (인덱스 효율 저하시) | DW (대용량 데이터, Equi Join 전용) |



'DB' 카테고리의 다른 글
| [병행제어] 타임스탬프 순서 규약 (Timestamp Ordering Protocol) (0) | 2026.02.15 |
|---|---|
| 인덱스 분포도 (1) | 2026.02.14 |
| [인덱싱] 비트맵 조인 인덱스(Bitmap Join Index) (0) | 2026.02.14 |
| [인덱싱] 클러스터 인덱스와 희소 인덱스 (0) | 2026.02.14 |
| [SQL] 이중 상관서브쿼리 (0) | 2026.02.14 |