Join Reordering

같은 내부 조인이라도 어떤 순서로 묶느냐에 따라 비용이 달라집니다.

내부 조인은 결합법칙과 교환법칙을 이용해 순서를 바꿀 수 있습니다. 옵티마이저는 중간 결과가 작아지는 순서를 비용으로 추정합니다.

(R ⋈ S) ⋈ T
≡ R ⋈ (S ⋈ T)

이 등가 변환은 주로 내부 조인에서 안전합니다. 외부 조인은 보존 행 때문에 순서가 자유롭지 않습니다.

학생 S 10,000행

학과='컴퓨터' 조건 적용 후 약 300행으로 줄어듭니다.

수강 E 1,000,000행

가장 큰 사실 테이블이라 조인 순서의 영향을 크게 받습니다.

과목 C 2,000행

과목명 출력에 필요하지만, 먼저 크게 결합할 이유는 적습니다.

비용이 큰 순서

큰 테이블끼리 먼저 조인하면 버릴 행까지 중간 결과에 섞입니다.

1. 조인 수강 E ⋈ 학생 S 큼
2. 중간 타 학과 학생의 수강까지 포함 많음
3. 필터 컴퓨터학과만 뒤늦게 선택 축소

비용이 작은 순서

선택도가 높은 조건과 작은 입력을 먼저 사용해 중간 결과를 줄입니다.

1. 선택 σ학과='컴퓨터'(학생 S) 300행
2. 조인 작은 S′ ⋈ 수강 E 감소
3. 조인 필요하면 과목 C를 마지막에 결합 완성
카디널리티

각 단계에서 예상되는 행 수를 추정합니다.

선택도

조건이 얼마나 많이 줄이는지 계산합니다.

인덱스

어떤 접근 경로가 가능한지 비교합니다.

조인 방식

Nested Loop, Hash Join 등 비용을 함께 봅니다.

핵심: 조인 순서 변경은 단순히 작은 테이블을 먼저 고르는 규칙이 아니라, 통계와 조건을 바탕으로 전체 예상 비용이 낮은 계획을 찾는 과정입니다.