🎱 Nested Loop Join
⚽️ 방식
- 중첩 반복 조인
- 한쪽 테이블의 각 행마다 다른 테이블을 검색 → 외부 루프 / 내부 루프
- 외부 루
⚽️ 구조
For each row in outer_table (M)
For each row in inner_table (N)
if join_condition matches
return row
⚽️ 특징
- 소량의 데이터 조인에 적합
- 외부 루프에서는 무조건 전체를 순차 탐색하고,
내부 루프는 외부 테이블 행마다 조건에 맞게 탐색
→ 내부 테이블에 인덱스가 있다면 빠름 (외부 테이블 인덱스는 상관 X)
- 외부 테이블이 작을 수록 효율적
⚽️ 사용 시점
- JOIN 대상 테이블이 작을 때
- 내부 테이블에 인덱스가 있을 때
- 외부 루프가 소량일 때
🎱 Merge Join
⚽️ 방식
- Sort-Merge Join
- 양쪽 테이블 모두 정렬되어 있어야 함
- 정렬된 상태에서 양쪽을 동시에 탐색하여 조인
⚽️ 구조
- 두 테이블을 JOIN KEY 기준으로 정렬
- 양쪽 포인터를 이동하며 매칭되는 키를 탐색
⚽️ 특징
⚽️ 사용 시점
- JOIN 키에 인덱스가 있어 정렬이 되어있을 때
- 이미 정렬된 데이터일 때
- 두 테이블 모두 클 때
🎱 Hash Join
⚽️ 방식
- 한 쪽 테이블을 메모리에 해시 테이블로 만들고 다른 쪽 테이블의 값을 조회
⚽️ 구조
- 작은 테이블을 기준으로 메모리에 해시 테이블 생성
- 큰 테이블의 각 행을 해시 테이블에서 탐색
⚽️ 특징
- 정렬 필요 없음
- 대용량 테이블 간 조인에 적합
- 메모리를 많이 사용 → 메모리 제약 주의
⚽️ 사용 시점
- 인덱스가 없을 때
- 정렬도 비효율적일 때
- 한 테이블이 크고, 한 테이블이 작을 때