DB

데이터베이스 주요 조인기법

타우루스 2026. 2. 14. 21:31

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 전용)