SQL 조인 방식 정리: Nested Loop, Sort-Merge, Hash Join

박우진·2025년 5월 19일

SQLD

목록 보기
3/12

SQL에서 두 개 이상의 테이블을 조합할 때 조인(Join) 연산이 사용됩니다. 효율적인 쿼리 성능을 위해 데이터베이스는 상황에 맞는 조인 전략을 자동으로 선택하거나, 명시적으로 힌트를 줄 수 있습니다. 이 글에서는 Nested Loop Join, Sort-Merge Join, Hash Join의 핵심 개념과 특성을 정리합니다.


1. Nested Loop Join

개념

하나의 테이블(외부 루프)을 기준으로, 다른 테이블(내부 루프)을 반복적으로 탐색하여 매칭되는 데이터를 찾는 방식입니다.

작동 방식

FOR each row in outer_table
    FOR each row in inner_table
        IF join_condition is true
            RETURN row

특징

  • 인덱스가 존재하면 매우 효율적 (특히 내부 테이블의 조인 키에 인덱스가 있을 경우)
  • 데이터 양이 작을수록 유리
  • 비등가 조인도 가능

장단점

장점단점
단순한 알고리즘, 비등가 조건 가능큰 테이블에선 성능 저하 가능
인덱스 활용 가능전체 탐색 비용 큼 (인덱스 없으면)

2. Sort-Merge Join

개념

두 테이블을 조인 키로 각각 정렬한 후, 병합(Merge)하는 방식입니다. 주로 정렬된 입력에 적합합니다.

작동 방식

  1. 두 테이블을 조인 키 기준으로 정렬
  2. 정렬된 결과를 병합(Merge)하여 매칭되는 행 반환

특징

  • **등가 조인(=)**에서 사용
  • 비등가 조인은 지원하지 않음
  • 인덱스가 없으면 정렬 비용이 큼
  • 양쪽 테이블 모두 정렬이 필요

장단점

장점단점
대용량에 적합 (정렬만 되면 빠름)정렬 비용이 크고 메모리 사용 높음
정렬된 데이터 처리에 효과적비등가 조인 불가

3. Hash Join

개념

한 테이블의 조인 키를 기반으로 해시 테이블을 생성하고, 다른 테이블의 키를 해시 테이블에서 검색하는 방식입니다.

작동 방식

  1. **작은 테이블(Build input)**을 메모리에 올려 해시 테이블 생성
  2. **큰 테이블(Probe input)**을 순회하며 매칭되는 행 탐색

특징

  • 인덱스 불필요
  • 주로 **등가 조인(=)**에 사용됨
  • 정렬 필요 없음

장단점

장점단점
인덱스 없이도 빠른 조인 가능메모리 사용량이 큼
정렬 불필요비등가 조인 불가

비교 요약

구분Nested Loop JoinSort-Merge JoinHash Join
조인 조건등가 / 비등가 모두 가능등가만주로 등가
인덱스 활용O (내부 테이블에 유리)필요 없음필요 없음
정렬 필요양쪽 정렬 필요
메모리 사용적음중간많음
대용량 적합OO
구현 복잡도단순중간복잡

사용 요약

  • 데이터가 작고 인덱스가 있을 때Nested Loop Join
  • 정렬된 대용량 데이터Sort-Merge Join
  • 인덱스가 없고, 등가 조건이면서 대용량일 때Hash Join

0개의 댓글