조인 순서의 기준

먼저 행 수를 줄이는 조인이 전체 비용을 낮춘다

최종 결과가 같아도 첫 조인에서 만든 중간 결과가 커지면 이후 모든 단계가 더 비싸집니다.

공유 시작점 같은 세 테이블을 조인
테이블
A 1000행
테이블
B 100행
테이블
C 10000행
같은 답을 내도
경로 비용은 다름

핵심 분기점은 첫 조인에서 얼마나 빨리 결과를 줄이느냐입니다. 큰 테이블을 초반에 만나면 중간 결과를 오래 들고 가게 됩니다.

첫 조인 선택 후 분기
작게 시작

A와 B를 먼저 조인

작은 집합을 먼저 만나 초반에 결과를 압축합니다.

첫 조인
A (1000) ⋈ B (100)

선택도가 높은 쪽부터 만나면 불필요한 행이 일찍 줄어듭니다.

중간 결과
약 100행

다음 단계는 작은 결과를 기준으로 이어져 메모리와 비교 횟수가 줄어듭니다.

다음 조인
(A ⋈ B) ⋈ C

큰 테이블 C는 줄어든 결과에 마지막으로 붙여도 충분합니다.

크게 시작

A와 C를 먼저 조인

큰 집합을 먼저 만나면 이후 연산 전체가 무거워집니다.

첫 조인
A (1000) ⋈ C (10000)

시작부터 처리해야 할 행이 많아져 조인 버퍼와 비교 비용이 커집니다.

중간 결과
약 10000행

이미 커진 중간 결과를 들고 다음 조인으로 넘어가므로 비효율이 누적됩니다.

다음 조인
(A ⋈ C) ⋈ B

작은 B를 나중에 만나도 앞에서 발생한 큰 비용은 되돌릴 수 없습니다.

옵티마이저의 판단

카디널리티를 추정해 중간 결과가 더 작아지는 순서를 고릅니다. 그래서 조인 순서 변경은 문법 장식이 아니라 실행 비용을 줄이는 핵심 최적화입니다.