4.2장 소트 머지 조인

친절한 SQL 튜닝 4.2장

소트 머지 조인은 언제 사용할까?

  • 조인 컬럼에 인덱스가 없을 때, 옵티마이저는 NL 조인 대신 소트 머지 조인이나 해시 조인을 선택한다.

  • 해시 조인이 더 효율적이긴 하지만, 대량 데이터를 조인할 때 유용하게 사용된다.

조인에서 중요한 튜닝 포인트는?

SQL이 조인을 수행할 때, 그 작업에 사용하는 메모리가 어디인지(SGA인지 PGA인지)를 이해해야 진짜 튜닝이 가능하다.

  • 정렬(Sort), 해시(Hash) 작업은 → SGA가 아닌 PGA에서 발생

  • PGA가 부족하면 디스크 TEMP 공간을 쓰게 되어 쿼리 성능이 급격히 저하됨

1. SGA & PGA

항목
SGA (Shared Global Area)
PGA (Program Global Area)

공유 여부

여러 세션이 공유

세션(프로세스) 전용

주요 용도

- SQL 파싱 결과 캐싱- 버퍼 캐시로 디스크 I/O 최소화

- 정렬(SORT)- 해시 조인(HASH JOIN) 등 연산용 메모리

위치

인스턴스 메모리

세션별 프로세스 메모리

병목 발생 시

SQL 재사용 안 됨, I/O 증가

TEMP 사용으로 성능 저하 발생

  • 소트 머지 조인과 해시 조인은 PGA 사용량이 많음

  • SQL 튜닝 시 → PGA_AGGREGATE_TARGET, WORKAREA_SIZE_POLICY 설정도 함께 봐야 함

  • 조인 방식에 따라 병목 지점이 SGA인지 PGA인지 달라짐

2. 기본 메커니즘

  1. 입력 집합 2개를 정렬 (Sort)

  2. 정렬된 상태에서 병합하며 조인 (Merge)

즉, 정렬 → 병합이라는 2단계 프로세스를 가진다.

3. 왜 빠른가?

  • 정렬된 데이터의 병합(Merge)은 매우 빠른 연산

    → 마치 두 개의 오름차순 배열을 하나로 합치는 것과 유사

  • 특히 양쪽 테이블이 이미 정렬되어 있다면 → 정렬을 생략하고 바로 Merge 가능

    → 즉, Sort 단계가 건너뛰어짐 → 성능 매우 우수

4. 해시 조인과의 차이

구분
소트 머지 조인
해시 조인

정렬 필요 여부

필요 (하지만 생략 가능)

필요 없음

성능 특징

정렬된 대용량 병합에 유리

메모리 기반 중간 해시테이블 생성에 유리

메모리 사용

PGA (정렬 및 병합)

  • 해시 조인은 등치 조건일 때만 사용할 수 있다.

  • 그래서 소트 머지 조인은 등치 조건이 아니거나 조인 조건이 없는 조인일 때 주로 사용한다.

5. 제어 방법

  • 옵티마이저가 조인 방식 선택

    → 힌트로 제어 가능

    SELECT /*+ USE_MERGE(A B) */ ...
  • 인덱스가 없거나, 인덱스 무시 힌트 사용 시 자주 선택됨

6. 정리

소트 머지 조인의 특징

항목
설명

조인 방식

정렬 후 병합 (Sort → Merge)

사용 메모리

PGA 사용 (정렬 시)

디스크 사용 위험

PGA 부족 시 TEMP 사용

빠른 조건

이미 정렬된 입력, 병합 대상이 많을 때

제어 힌트

USE_MERGE, NO_INDEX, ORDERED

소트 머지 조인은 정렬만 잘 되면 매우 빠른 조인이다.

하지만 정렬이 필요하다는 점에서 PGA 튜닝과 TEMP I/O에 민감하므로 조인 방식 선택 시 메모리 구조까지 고려해야 한다.

Last updated