처리 순서

작은 입력을 해시로 만들고, 큰 입력은 같은 버킷만 본다

Hash Join의 핵심은 전체 비교를 버킷 조회로 바꾸는 것입니다. 동등 조인에서는 이 한 번의 구조화가 이후 탐색 비용을 크게 줄입니다.

BUILD 작은 테이블 선택

메모리에 올리기 쉬운 쪽을 먼저 잡고 조인 키를 읽습니다.

dept_id 10 20 30
HASH 같은 키를 같은 버킷에 저장

Probe 단계에서는 전체를 다시 보지 않고, 해당 버킷 후보만 검사합니다.

10 -> [row] 20 -> [row, row] 30 -> [row]
PROBE 큰 테이블은 한 번씩만 통과

각 행마다 해시를 계산하고 같은 버킷에서만 매칭을 찾습니다.

for row in big_table hash(key) lookup bucket
효과

비용 감각은 O(N + M)에 가깝습니다. 그래서 대량 데이터의 = 조인에서 Nested Loop Join보다 유리해지기 쉽습니다.

언제 잘 맞는가

버킷 조회가 이득일 때 강하다

강점
대량 데이터 + 동등 조인에서 전체 비교를 줄입니다. 조인 키 인덱스가 없어도 해시 버킷이 탐색 기준이 됩니다.
전제
Build 쪽이 충분히 작아야 메모리 해시 테이블을 만드는 비용이 감당됩니다.
약점
>, <, BETWEEN 같은 범위 조건은 같은 버킷만으로 바로 찾을 수 없습니다.
운영
작은 쪽이 메모리에 안 들어가거나 키 분포가 치우치면 버킷 이점이 줄고 비용이 다시 커집니다.