Join strategy decision tree

옵티마이저의 조인 선택은 SQL 모양보다 입력 상태를 따라가는 의사결정입니다.

같은 JOIN 문장이라도 행 수, 인덱스, 조인 조건, 정렬 상태가 달라지면 전혀 다른 실행 방식이 선택됩니다.

읽는 순서

왼쪽의 입력 조건을 보고 오른쪽 실행 방식으로 이어가면, 왜 그 조인 방식이 선택되는지 바로 연결됩니다.

행 수 외부 입력이 작은가, 양쪽 모두 큰가
접근 경로 내부 테이블에 바로 찍어 갈 인덱스가 있는가
비교 방식 = 조건인가, 정렬·범위 비교가 중요한가
외부 행이 적고 내부 테이블을 인덱스로 바로 찾을 수 있다

반복 횟수가 작고 각 탐색이 짧으면, 행마다 내부를 찍어 들어가는 방식이 싸게 먹힙니다.

Nested Loops 소량 조회 + 인덱스 탐색
양쪽 입력이 크고 조인 조건이 등호(=)다

작은 쪽을 해시 테이블로 만든 뒤 큰 쪽을 흘려보내면 대량 매칭을 정렬 없이 처리할 수 있습니다.

Hash Join 대량 등호 조인
양쪽이 이미 정렬돼 있거나, 범위·비등호 조건이 중요하다

같은 순서로 맞춰 놓고 앞으로 병합하면, 정렬된 흐름과 범위 비교를 자연스럽게 활용합니다.

Sort Merge Join 정렬 활용 + 범위 비교
한 줄 기준

Nested Loops는 “작게 여러 번”, Hash Join은 “크게 한 번”, Sort Merge Join은 “정렬된 순서로 앞으로” 처리한다고 기억하면 실행 계획을 읽기 쉬워집니다.