Nested Loop Join(NL Join, 중첩 루프 조인)

 

동작 원리 : 외부 테이블(Outer)의 각 행마다 내부 테이블(Inner)를 순회해서 매칭되는 행을 찾는 방식

즉, 이중 for문 구조처럼 작동한다.

 

-- 예시 
SELECT *
FROM employees e
JOIN departments d ON e.dept_id = d.id;

-- 실제 실행 개념
for each row in employees
  for each row in departments
    if (e.dept_id == d.id)
      return row

 

항목 내용

사용 조건 조인 키에 인덱스가 존재할 때 매우 효율적
시간 복잡도 O(N * M) (단, 인덱스 없을 시 급격히 느려짐)
장점 즉시 결과 반환 가능, 인덱스 기반 랜덤 액세스
단점 내부 테이블 크거나 인덱스 없으면 성능 급락

 

실무 예시

1. 한 쪽 테이블이 작고, 다른 쪽에 인덱스가 잘 잡혀 있을 때

2. 예: user_id로 주문 내역 조회(주문 테이블에 인덱스 있음) 

 

Hash Join(해시 조인)

 

동작 원리: 조인키를 기준으로 작은 테이블을 해시 테이블로 만들고 큰 테이블을 스캔하여 해시 매칭으로 조인하는 방식

 

-- 예시
SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.id;

-- 실행 개념
Build phase: customers → 해시 테이블 생성
Probe phase: orders → 해시 테이블에서 customer_id 일치 여부 검색

 

항목 내용

사용 조건 조인 컬럼에 인덱스 없어도 가능
장점 대용량 테이블 간 조인에도 효율적
단점 해시 테이블 생성 시 메모리 사용량 많음
시간 복잡도 O(N + M)

 

실무 예시

1. 대용량 조인, 인덱스 없는 컬럼 조인

2. 예: 월별 통계 계산, 로그 + 사용자 정보 병합

 

Sort-Merge Join(SM Join, 정렬 병합 조인)

 

동작 원리: 양쪽 테이블을 조인 키 기준으로 정렬한뒤, 정렬된 상태에서 한 번에 병합 하는 방식

 

-- 예시
SELECT *
FROM sales s
JOIN region r ON s.region_id = r.id;

-- 실행 개념
1. sales, region 각각 조인 키 기준 정렬
2. 정렬된 두 집합을 병합하면서 일치하는 행 연결

 

항목 내용

사용 조건 두 테이블 모두 정렬된 상태일 때 가장 효율적
장점 정렬된 대량 데이터 처리에 적합
단점 정렬 과정 비용 큼, 인덱스 없으면 임시 정렬 필요
시간 복잡도 O(N log N + M log M)

 

실무 예시

1. 대용량 정렬 데이터 조인

2. 예: 날짜, 타임스탬프 기반 로그 조인

 

비교 요약표

조인 방식 원리 인덱스 필요 장점 단점 적합한 상황
Nested Loop Join 외부→내부 반복 검색 ✅ 필요 인덱스 있을 때 빠름 인덱스 없으면 느림 작은 테이블 + 인덱스 존재
Hash Join 해시 테이블 빌드 후 매칭 ❌ 불필요 대용량 처리 빠름 메모리 많이 사용 대용량 + 인덱스 없음
Sort-Merge Join 양쪽 정렬 후 병합 ❌ 불필요 정렬 데이터 조인 효율 정렬 비용 큼 이미 정렬된 데이터

 

정리 한 줄 요약

 

인덱스 있으면 -> Nested Loop Join

인덱스 없어도 대용량이면 -> Hash Join

둘 다 정렬되 있으면 -> Sort-Merge Join

반응형

+ Recent posts