최종 결과가 같아도 첫 조인에서 만든 중간 결과가 커지면 이후 모든 단계가 더 비싸집니다.
핵심 분기점은 첫 조인에서 얼마나 빨리 결과를 줄이느냐입니다. 큰 테이블을 초반에 만나면 중간 결과를 오래 들고 가게 됩니다.
작은 집합을 먼저 만나 초반에 결과를 압축합니다.
선택도가 높은 쪽부터 만나면 불필요한 행이 일찍 줄어듭니다.
다음 단계는 작은 결과를 기준으로 이어져 메모리와 비교 횟수가 줄어듭니다.
큰 테이블 C는 줄어든 결과에 마지막으로 붙여도 충분합니다.
큰 집합을 먼저 만나면 이후 연산 전체가 무거워집니다.
시작부터 처리해야 할 행이 많아져 조인 버퍼와 비교 비용이 커집니다.
이미 커진 중간 결과를 들고 다음 조인으로 넘어가므로 비효율이 누적됩니다.
작은 B를 나중에 만나도 앞에서 발생한 큰 비용은 되돌릴 수 없습니다.
카디널리티를 추정해 중간 결과가 더 작아지는 순서를 고릅니다. 그래서 조인 순서 변경은 문법 장식이 아니라 실행 비용을 줄이는 핵심 최적화입니다.