Nested loop
- 하나의 테이블을 기준으로 다른 테이블을 순차적으로 row 를 결합하여 join
- index가 없어도 사용 가능
- 좁은 범위에서 유리한 성능을 보임
- Random Access 위주이므로 결과 집합이 많을수록 느려짐
- Row 수가 적은 테이블을 Driven 테이블로 설정
- 실행시간이 |A|·|B| 로 매우 느림
Sort-Merge
- 양 테이블을 정렬 후 비교하며 join
- Random Access 대신 scan 수행
- 조인 연산자가 = 가 아닌 경우 Nested loop 보다 유리한 경우가 많음
- 두 결과 집합 크기의 차이가 큰 경우 비효율적
- Sort 되기 때문에 매우 빠르지는 않지만 여러 테이블을 join 시 사용되는 실행 계획
- join query 에 order by 가 있는 경우 사용됨
- Sorting 메모리에 위치하는 대상은 join key뿐만 아니라 Select list도 포함되므로 불필요한 select 항목 제거
- 실행시간이 |A|log|A| + |B|log|B| + |A| + |B| 로 느린 편
Index Join
- index 를 사용하여 join 하는 방식
- 실행시간이 |A| or |B| 로 빠름
Hash Join
- 해싱 함수를 이용해 join 될 대상들을 특정 partition에 모이도록 함
- row size 가 충분히 작아야한다 (메모리에 올라갈 만큼)
- 이미 정렬된 relation이나 인덱스를 사용하기 어려운 경우 사용
- join 연산자가 '=' 일 때에만 사용 가능
- 실행시간이 |A| + |B| 로 빠름