[DB/SQL] JOIN 알고리즘

songeunm·2025년 6월 7일

DB & SQL

목록 보기
20/27

🎱 Nested Loop Join

⚽️ 방식

  • 중첩 반복 조인
  • 한쪽 테이블의 각 행마다 다른 테이블을 검색 → 외부 루프 / 내부 루프
  • 외부 루

⚽️ 구조

For each row in outer_table (M)
    For each row in inner_table (N)
        if join_condition matches
            return row

⚽️ 특징

  • 소량의 데이터 조인에 적합
  • 외부 루프에서는 무조건 전체를 순차 탐색하고,
    내부 루프는 외부 테이블 행마다 조건에 맞게 탐색
    → 내부 테이블에 인덱스가 있다면 빠름 (외부 테이블 인덱스는 상관 X)
  • 외부 테이블이 작을 수록 효율적

⚽️ 사용 시점

  • JOIN 대상 테이블이 작을 때
  • 내부 테이블에 인덱스가 있을 때
  • 외부 루프가 소량일 때

🎱 Merge Join

⚽️ 방식

  • Sort-Merge Join
  • 양쪽 테이블 모두 정렬되어 있어야 함
  • 정렬된 상태에서 양쪽을 동시에 탐색하여 조인

⚽️ 구조

  1. 두 테이블을 JOIN KEY 기준으로 정렬
  2. 양쪽 포인터를 이동하며 매칭되는 키를 탐색

⚽️ 특징

  • 대량의 데이터에 적합
  • 정렬 비용 필요

⚽️ 사용 시점

  • JOIN 키에 인덱스가 있어 정렬이 되어있을 때
  • 이미 정렬된 데이터일 때
  • 두 테이블 모두 클 때

🎱 Hash Join

⚽️ 방식

  • 한 쪽 테이블을 메모리에 해시 테이블로 만들고 다른 쪽 테이블의 값을 조회

⚽️ 구조

  1. 작은 테이블을 기준으로 메모리에 해시 테이블 생성
  2. 큰 테이블의 각 행을 해시 테이블에서 탐색

⚽️ 특징

  • 정렬 필요 없음
  • 대용량 테이블 간 조인에 적합
  • 메모리를 많이 사용 → 메모리 제약 주의

⚽️ 사용 시점

  • 인덱스가 없을 때
  • 정렬도 비효율적일 때
  • 한 테이블이 크고, 한 테이블이 작을 때
profile
데굴데굴 구르는 개발자 지망생

0개의 댓글