본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 25 / 32

SQL 고급활용 및 튜닝 · 조인 튜닝 25 / 32

조인 튜닝

조인 순서와 NL, Hash, Sort Merge 조인 선택 기준을 성능 관점에서 다시 정리합니다.

출제 빈도 ★★★★ 관련 문제 3개 | NLHashSort Merge

조인 튜닝의 핵심

조인 튜닝은 크게 두 가지를 결정하는 일입니다.

  • 어떤 테이블을 먼저 읽을 것인가
  • 어떤 조인 방식을 사용할 것인가

같은 SQL도 작은 결과부터 시작하면 빠르고, 큰 결과를 먼저 만들면 느려질 수 있습니다.

조인 순서

보통은 조건으로 많이 줄어드는 테이블을 먼저 읽는 것이 유리합니다.

SELECT *
FROM orders o
JOIN customer c ON c.customer_id = o.customer_id
WHERE o.order_date >= DATE '2026-04-01'
  AND o.order_date < DATE '2026-05-01';

주문일 조건으로 orders가 크게 줄어든다면 orders를 먼저 읽는 계획이 유리할 수 있습니다. 반대로 특정 VIP 고객 한 명의 주문을 찾는다면 customer 조건에서 시작하는 것이 더 나을 수 있습니다.

NL 조인 튜닝

Nested Loop 조인은 바깥쪽 결과의 각 행마다 안쪽 테이블을 찾아가는 방식입니다.

유리한 조건:

  • 바깥쪽 결과가 작습니다.
  • 안쪽 조인 컬럼에 인덱스가 있습니다.
  • 빠른 응답이 필요한 OLTP 단건 조회입니다.

불리한 조건:

  • 바깥쪽 결과가 큽니다.
  • 안쪽 테이블을 반복해서 많이 읽습니다.
  • 안쪽 조인 컬럼에 적절한 인덱스가 없습니다.

Hash 조인 튜닝

Hash 조인은 작은 쪽으로 해시 테이블을 만들고 큰 쪽을 읽으며 매칭합니다.

유리한 조건:

  • 대용량 등가 조인입니다.
  • 인덱스 효과가 낮습니다.
  • 배치성 집계나 대량 조회입니다.

주의할 점:

  • 등가 조인에 적합합니다.
  • 메모리가 부족하면 임시 공간 사용으로 느려질 수 있습니다.
  • 아주 적은 결과에는 해시 구성 비용이 부담이 될 수 있습니다.

Sort Merge 조인 튜닝

Sort Merge 조인은 양쪽을 조인 키로 정렬한 뒤 병합합니다.

유리한 조건:

  • 양쪽이 이미 정렬되어 있거나 정렬 비용이 낮습니다.
  • 범위 조인이 포함됩니다.
  • 대용량 데이터를 순차적으로 처리하는 편이 낫습니다.

불리한 조건:

  • 정렬 대상이 크고 메모리가 부족합니다.
  • 작은 결과를 빠르게 찾는 쿼리입니다.

조인 튜닝 체크리스트

질문의미
먼저 읽는 테이블이 충분히 작아지는가조인 시작점 확인
조인 조건 컬럼에 인덱스가 있는가NL 조인 가능성 확인
조인 조건이 등가 조건인가Hash 조인 가능성 확인
정렬 비용이 큰가Sort Merge 부담 확인
중간 결과가 폭증하지 않는가잘못된 조인 순서 탐지

한 문장 요약

조인 튜닝은 작은 결과를 먼저 만들고, 데이터 양과 조건에 맞는 조인 방식을 고르는 일입니다.