DBDBDEEP
4.2 소트 머지 조인 본문
SGA & PGA
SGA
- 공유 메모리 영역에 데이터가 캐시되고, 여러 프로세스가 공유할 수 있음.
- 동시에 액세스 할 수는 없음 > 이를 직렬화 하기 위해 Lock 매커니즘으로서 Latch가 존재함
- Datablock & Index Block을 캐싱하는 DB 버퍼캐시는 SGA의 가장 핵심적인 구성요소로 블록을 읽으려면 버퍼 Lock도 얻어야 한다.

PGA
- 프로세스 자신만의 고유 메모리 영역을 갖게 되는데 이곳이 PGA 이다.
- 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용하고, PGA공간이 작아 데이터를 모두 저장할 수 없을 때는 Temp Table Space를 사용하게 된다.
- 독립적인 공간이므로 Latch 매커니즘 불필요
- 같은 양의 데이터를 읽을 때 SGA 버퍼캐시에서 읽을 때보다 빠르다.
소트 머지 조인 매커니즘
1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬
2. 머지 단계 : 정렬한 양쪽 집합을 서로 머지(Merge) 한다.

C (사원 테이블) 기준으로 고객 테이블과 조인할 때 소트 머지 조인을 사용하라고 지시한다.
① ===================================================

위에서 사원 데이터를 읽어 조인컬럼인 사원번호 순으로 정렬한다.
정렬한 결과 집합은 PGA 영역에 할당된 Sort Area에 저장하고,
정렬한 결과집합이 PGA 영역에 담을 수 없을 정도로 크면 Temp Tablespace에 저장한다.
② ===================================================

고객 데이터를 읽어 조인컬럼인 관리사원번호 순으로 정렬
정렬한 결과 집합은 PGA 영역에 할당된 Sort Area에 저장하고,
정렬한 결과집합이 PGA 영역에 담을 수 없을 정도로 크면 Temp Tablespace에 저장한다.
③ ===================================================
PGA or Temp Tablespace에 저장한 사원 데이터를 스캔하면서 PGA에 저장한 고객 데이터와 조인
조인 과정은 다음과 같다.

위의 1,2번이 소트 단계이고 3번이 머지 단계이다.
3번 머지 단계는 NL 조인과 다르지 않은 것을 알 수 있다.
고객 데이터가 정렬되어 있으므로 조인 대상 레코드가 시작되는 지점을 쉽게 찾을 수 있고
조인에 실패하는 레코드를 만나는 순간 바로 멈출 수 있음.

NL JOIN vs Sort Merge Join
NL 조인
- 대량 데이터를 조회할 때 조인 성능이 매우 느리다는 담점이 있음
- '인덱스를 이용한 조인 방식' 조인 과정에서 액세스하는 모든 블록을 랜덤 액세스 방식으로
건건이 DB Buffer Cache를 경유해서 읽음. 찾지 못한 블록은 '건건이' 디스크에서 읽음
- 인덱스 손익 분기점 한계를 그대로 드러낸다.
Sort Merge Join
- 대량 데이터 처리에 유리하다.
- 양쪽 테이블로 부터 읽어들여 정렬한 후 조인하기 때문에, 소트연산이 추가되어 느릴 거 같지만
이것이 대량 데이터 처리를 빠르게 해주는 요인이다.
Sort Merge Join 주 용도
- 조인 조건식이 등치(=) 조건이 아닌 대량 데이터 조인
- 조인 조건식이 아예 없는 조인(Cross Join, 카테시안 곱)

'친절한 SQL 튜닝' 카테고리의 다른 글
| 4.4 서브쿼리 (0) | 2026.05.18 |
|---|---|
| 4.3 해시조인 (0) | 2026.05.18 |
| 4.1 NL 조인 (0) | 2026.05.18 |
| LIKE/BETWEEN 조건 활용 (0) | 2026.05.18 |
| IN 조건이 '='으로 해석될 수 있는지 (0) | 2026.05.18 |