- 줄여서 NL JOIN이라고도 함.
- 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 Row를 결함하여 원하는 결과를 조합하는 조인방식
- 조인 조건에 해당하는 데이터를 찾으면 바깥쪽 루프의 다음 행으로 넘어가며 안쪽 루프는 처음부터 다시 시작.
- 선행 테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행한다.
- 결과 행의 수가 적은 테이블을 조인 순서상 선행 테이블로 선택하는 것이 전체 일량을 줄일 수 있다.
선행 테이블에서 조건을 만족하는 첫 번째 행을 찾음
-> 이때 선행 테이블에 주어진 조건을 만족하지 않는 경우 해당 데이터는 필터링됨
선행 테이블의 조인 키를 가지고 후행 테이블에 조인 키가 존재하는지 찾음
-> 조인시도
후행 테이블의 인덱스에 선행 테이블의 조인 키가 존재하는지 확인
-> 선행 테이블의 조인 값이 후행 테이블에 존재하지 않으면 선행 테이블 데이터는 필터링됨(조인작업x)
4.인덱스에서 추출한 레코드 식별자를 이용하여 테이블을 액세스
-> 인덱스 스캔을 통한 테이블 액세스
~ 11) 반복수행
Driving Table의 조건을 만족하는 결과 row수가 많다면 그만큼 반복해서 Driven table에 접근해야하므로 WHERE절로 최대한의 데이터를 거를 수 잇는 테이블이나 애초에 데이터의 양이 적은 테이블로 선정해야한다.
- 큰 테이블과 작은 테이블 사이에서 주인 수행하는데 효과적.
- 작은 테이블을 해시 함수를 사용해서 해시테이블로 만든 뒤
큰 테이블의 각 행을 해시 함수에 적용하여 해시 테이블에서 조인할 데이터를 검색함.- 비용기반 옵티마이저(Cost-Based Optimizer,CBO) 사용할 때만 사용될 수 있는 조인방식.
- '='비교를 통한 조인에서만 사용됨.
- 주로 많은 양의 데이터를 조인해야 하는 경우 주로 샤용.
- NL Join 랜덤 액세스와 Sort Merge Join의 문제점인 정렬 작업의 부담을 해결하기 위한 대안으로 등장.
- 조인 컬럼의 인덱스가 존재하지 않을 경우에도 사용가능.
- 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋다.
- 작은 테이블과 큰 테이블의 크기가 비슷하면 좋은 성능을 발휘하지만, 작은 테이블이 매우 작거나 클 때는 효율일 떨어질 수 있다.
해시 테이블을 생성하는 비용을 효율화 하는 것이 중요.
작은집합(Build Inut)이 Hash Area에 담길 정도로 충분히 작아야함.
Build Input 해시 키 칼럼에 중복 값이 거의 없어야 함.
HASH_AREA_SIZE에 지정된 크기만큼의 메모리가 할당되어 사용된다.
그렇기 때문에 CPU의 성능을 향상한다면 HASH JOIN의 성능을 향상시킬 수 있다.
- 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행.
- 조회의 범위가 많을 때 주로 사용하는 조인 방법론.
- 조인 조건 칼럼에 인덱스가 없거나 출력해야 할 결과 값이 많을 때 사용됨.
- 연결고리에 인덱스가 전혀 없는 경우에 사용됨.
- 조인조건으로 <,>,>=,<= 와 같은 범위 비교 연산자가 사용된 경우
- 주로 스캔 방식으로 데이터를 읽는다.
- 데이터 양이 많고 정렬 비용이 적을 때 우수하지만, 데이터 정렬에 많은 비용이 발생할 수 있다.
테이블을 Acess할 때 FULL TABLE SCAN이냐 INDEX RANGE SCAN이냐 하는 등 테이블을 Access 하는 방법을 다양한 방법을 통해 최적화 시킨다면 SORT MERGE JOIN의 속도도 자연스럽게 최적화 할 수 있다.
조인 조건 컬럼이 이미 정렬되어 있다면 정렬하는 작업을 단축시키므로 검색 속도 향상에 도움을 준다.
SORT MERGE JOIN은 양쪽 테이블을 ACCESS하고 조회한 데이터들을 정렬할때 어느 한쪽이라도 정렬 작업이 종료되지 않으면 한쪽이 대기 상태가 되고 다른 한쪽의 정렬이 완전히 끝날 때까지 조인이 시작될 수 없다.
그렇기에 두 테이블 ACCESS속도와 정렬 속도를 최대한 비슷하게 맞추어주는 것이 좋다.
비교해야 할 두 테이블의 데이터 양이나 정렬 속도를 고려하여 최대한 맞춰주는 것이 효율성 측면에서 좋다.
⭐출처
[DB] 데이터베이스 NESTED LOOPS JOIN (중첩 루프 조인)에 대하여
https://coding-factory.tistory.com/756
관계형 데이터베이스(RDBMS) 조인 알고리즘 종류: Nested Loop Join, Hash Join, Sort Merge Join
https://bestwizard.tistory.com/583
Join 기법 정리 (Nested Loop, Sort Merge, Hash)
https://devlog.changhee.me/posts/Join%EA%B8%B0%EB%B2%95_%EC%A0%95%EB%A6%AC/#2-sort-merge-join