Nested Loop Join
2개 이상의 테이블에서 하나의 테이블을 기준으로 순차적으로 상대방 ROW를 결합하여 원하는 결과를 추출하는 방식
Driving Table
- 선행 테이블
- 조인 시 먼저 액세스 되는 테이블
- Where 절로 최대한 데이터를 거를 수 있는 테이블/데이터 양이 적은 테이블로 선정
Driven Table
- 후행 테이블
- 조인시 나중에 액세스 되는 테이블
- 조인을 위한 인덱스가 생성 필요
특징
- 좁은 범위에 유리한 성능
- Random Access 기반
- 실행 속도 = 선행 테이블 사이즈 * 후행 테이블 접근 횟수(이중 for 문 생각하면 쉬움)
참고
랜덤 액세스 & 스캔
Sort Merge Join
양 테이블을 각각 접근하여 결과를 정렬하고(조인 컬럼을 기준으로 정렬) 정렬한 결과를 Full Table Scan해가면서 연결 조건으로 Merge하는 방식
특징
- 연결을 위해 랜덤 액세스를 하지 않고 스캔을 하면서 수행
- 두 결과 집합의 크기가 차이가 많이 나는 경우에는 비효율적
Hash Join
- 두 테이블 중 하나를 Hash Table로 선정하여, 테이블의 key 값을 Hash 알고리즘으로 비교하여 조인을 수행하는 방식
- Sort-Merge 조인은 소트의 부하가 많이 발생하여, 이를 보완하기 위한 방법으로 Sort 대신 해쉬값을 이용하는 조인
특징
- 대용량 처리의 선결조건인 랜덤 액세스와 정렬에 대한 부담을 해결할 수 있는 대안