조인의 원리
1. 중첩 루프 조인(NL Join, Nested Loop Join)
1-1. 중첩 루프 조인이란?
프로그래밍의 중첩 반복문과 같은 방식으로 동작하는 기법
A라는 집합을 한건 한건 읽어가면서 해당 결과를 바탕으로 B집합에서 데이터를 찾아가는 방식
대용량의 테이블에서 데이터를 한건 한건씩 찾아가는 방식은 성능에 부하를 주게된다.
Driving Table를 선정하고 이 테이블로부터 where절에 정의된 검색 조건을 만족하는 데이터들을 걸러낸 후, 이 값을 가지고 조인 대상 테이블을 반복적으로 검색하면서 조인 조건을 만족하는 최종 결과값을 얻어낸다.
1-2. Driving Table과 Driven Table
Driving Table(선행 테이블)은 JOIN를 할 때 먼저 액세스 되는 테이블이며 나중에 액세스 되는 테이블이 Driven Table(후행 테이블)이라고 한다.
1-3. 중첩 루프 조인의 원리
1-4. 중첩 루프 조인 성능 개선 포인트
적절한 Driving Table의 선정이 중요하다. where 절로 최대한의 데이터를 거를 수 있는 테이블이나 애초에 데이터의 양이 적은 테이블로 선정하는 것이 좋다.
2. 정렬 병합 조인(Sort Merge Join)
2-1. 정렬 병합 조인이란?
조회의 범위가 많을 때 주로 사용하는 조인 방법
조인 칼럼을 기준으로 데이터를 정렬한 후 조인을 수행함
조인 칼럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있음
2-2. 정렬 병합 조인의 수행 방식
선행 테이블에서 주어진 조건에 만족하는 행을 찾는다.
해당 행들에 대해서, 선행 테이블의 조인 키(칼럼)를 기준으로 데이터를 정렬
후행 테이블에서 주어진 조건에 만족하는 행을 찾는다.
해당 행들에 대해서, 후행 테이블의 조인 키(칼럼)를 기준으로 데이터를 정렬
JOIN을 수행
추출 버퍼란? SQL문의 실행결과를 보관하는 버퍼로서 일정 크기를 설정하여 추출버퍼에 결과가 모두 차거나 더 이상 결과가 없어서 추출버퍼를 채울 것이 없으면 결과를 사용자에게 반환한다. 운반단위, Array Size, Prefetch Size라고도 함.
3. 해시 조인(Hash Join)
3-1. 해시 조인이란?
조인될 두 테이블 중 하나를 해시 테이블로 선정하여 조인될 테이블의 조인 키 값을 해시 알고리즘으로 비교하여 매치되는 결과값을 얻는 방식이다.
주로 많은 양의 데이터를 조인해야 하는 경우에 주로 사용되며 동등(=) 배교를 통한 조인에서만 사용될 수 있다.
해시 조인을 할 때는 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋다.
3-2. 해시 조인의 수행 원리
선행 테이블에서 주어진 조건을 만족하는 행을 찾는다.
해당 행들에 대해서, 선행 테이블의 조인 키(칼럼)를 기준으로 Hash 함수를 적용하여 해쉬 테이블을 생성
후행 테이블에서 주어진 조건을 만족하는 행을 찾는다.
해당 행들에 대해서, 후행 테이블에 Hash 함수를 적용하여 선행 테이블의 해쉬 테이블에 맞는 버킷을 찾는다.
JOIN을 수행
후행 테이블의 조건을 만족하는 모든 행에 대해서 3~5번 반복
1,2는 빌드 단계이며 3,4,5와 결과값을 반환하는 과정은 프로브 단계이다.
참고
📅 2022-10-24
Last updated