조인수행 방법 3가지
-
Nested Loop
루프를 돌며 두 테이블의 로우를 연결하는 형식
-
Sort-Marge
참조할 인덱스가 없는 두 테이블을 정렬하여 순차적으로 연결시켜주는 방식
-
Hash
두 테이블이 너무 큰 경우, 해쉬맵에 저장하여 연결시켜 조인하는 방식
Nested Loop join(NL join)

원리
- 선행테이블에서 첫 번째 행을 접근
- 그 행의 조인할 속성을 가지고 후행테이블 인덱스를 거쳐 접근
- 1~2번의 작업을 반복하여 맵핑하여 결과를 버퍼에 저장하여 마지막에 출력함
특징
- 선행테이블을 풀스캔하므로, 선행테이블의 크기가 작을수록 유리함
✔️ 그래서, 두 테이블의 크기 차이가 있느니 경우, 유리하게 사용될 수 있는 방법임
- 후행테이블에 대해서는 반드시 인덱스가 존재해야 NL조인이 가능
- 절차적이며,프로그래밍에서 for, while문과 같은 구조로 수행된다. (loop를 돎)
Sort-Marge join

원리
- 선행테이블의 조인 조건을 만족하는 행을 찾아 정렬(풀스캔)
- 후행테이블의 조건을 만족하는 행을 찾아 정렬(풀스캔)
- 정렬된 두 결과를 비교하여 조인 수행& 성공결과를 버퍼에 저장하여 출력
특징
- 인덱스가 없어도 가능한 조인법
- 조인시 '='이 아닌 경우, NL보다 유리한 방법
- 두 테이블의 사이즈가 비슷한 경우 유리
- 사이즈가 차이가 큰 경우에는 불리하고 비효율적(NL이 유리)
- 사전에 Sorting작업 필요
Hash join
✔️ Sort Merge로는 대용량 데이터를 처리하기에 메모리 부하가 있어 고안된 방법

원리
- 선행테이블에서 키를 기준으로 만족하는 행에 해쉬함수를 적용하여 해쉬테이블로 생성(조인컬럼과 select 컬럼도 저장)
- 후행테이블에서도 똑같이 수행
- 해쉬테이블이 완성되면 추출버퍼에에 넣어 결과 출력
특징
- 메모리 사용이 큰 대용량 테이블 조인시 메모리 외의 임시영역까지사용하여 저장할 수 있어 유리
- 동등조인 시에만 사용 가능한 방법이므로 거의 사용이 없음
✔️ Non Equal Join 은 불가능. Equal Join 만 가능함
# Summary
NL(Nested Loop) join
- 선행테이블이 작을수록 유리
- 두 테이블의 크기 차가 있는 경우 유리
- 후행테이블은 반드시 인덱스가 존재해야 함
- 절차적
- for, while문과 같은 구조
Sort Marge join
- 인덱스가 없어도 가능
- 조인시 '='이 아닌 경우, NL보다 유리
- 두 테이블의 사이즈가 비슷한 경우 유리
- 사이즈가 차이가 큰 경우에는 불리하고 비효율적(NL이 유리)
- 사전에 Sorting작업 필요
Hash join
- 인덱스 필요 X
- 작은 테이블을 memory에 올리는 선행테이블로 사용
- 대용량 테이블 조인 시 유리
- 동등 조인 시에만 사용 가능
- Non Equal Join 불가능. Equal Join만 가능
+) non equal join일경우는 cross join을 한다 (cross조인은 tbl1의 컬럼수 X tbl2의 컬럼수