본문 바로가기
데이터베이스

데이터베이스 아우터 조인(Outer Join)

by 다시쓰는 2023. 10. 16.
반응형

 

아우터 조인(Outer Join)

 아우터 조인이란 어떤 대상 집합을 기준으로 거기에 아우터 조인되어 있는 집합에 대응되는 로우가 없더라도 기준 집합의 모둔 로우들을 리턴하는 조인이다.  때론 없다라는 사실도 중요한 정보가 되기 때문에 기준 집합은 그대로 보존되기를 원하는 경우이다.

 

Nested Loops 아우터 조인

반드시 기준 집합이 외측 루프로써 먼저 수행되어야 하며 내측 루프가 수행될 때 연결에 실패를 하더라도 외측 루프의 로우를 탈락시키지 않는 방식으로 수행된다. 이것은 절대적인 준수사항이기 때문에 만약 여러분의 필수적인 목적없이 함부로 아우터 조인을 시키면 조인의 방향이 고정되므로 주의하여야 한다.

 새로운 시스템으로 데이터 이행이 프로젝트 종료시점에 가서야 겨우 완료되고 있는 실정이다. 

 정확한 데이터였다면 아우터 조인으로 실행할 이유가 없는 경우까지도 문제있는 데이터로 테스트를 하려다 보니 아우터 조인을 하지 않고서는 도저히 원하는 결과를 확인할 수가 없다.

 

해쉬 아우터 조인

 아우터 조인이 수행되는 경우는 옵티마이져가 Nested Loops 조인으로는 부담이 되는 대량의 데이터이거나 인덱스 등의 문제로 Nested Loops 조인으로 수행에 문제가 있을 때 선택될 수 있다. 이 방식에서도 기준 집합은 무조건 빌드입력(Build Input)을 담당하게 되고 내측 조인 집합이 해쉬 테이블로 생성되어 연결작업이 수행된다.

 

 * 해시 아우터 조인은 다음과 같은 상황에서 유용하게 사용될 수 있다

 두 테이블 간의 공통 열이 없는 경우: 해시 아우터 조인은 두 테이블 간의 관련된 데이터를 결합할 때, 특별한 조인 키나 공통 열이 없는 경우에 유용하다. 이런 상황에서 내부 조인(inner join)을 사용할 수 없다.

 

 두 테이블의 크기가 큰 경우: 해시 아우터 조인은 대용량 테이블 간의 조인을 수행할 때 성능 향상을 제공할 수 있다. 이는 두 테이블을 해시 테이블로 변환하고 해시 함수를 사용하여 일치하는 행을 찾기 때문에 작은 데이터 집합으로 더 효율적으로 작업할 수 있다.

 

해시 아우터 조인의 기본 원리는 아래와 같다

 먼저, 하나의 테이블(일반적으로 더 작은 테이블)을 메모리에 로드하고 해시 테이블을 생성한다. 이 해시 테이블은 특정 열의 값을 해시 함수를 사용하여 해시로 변환한 후, 해당 해시 값을 인덱스로 사용하여 테이블의 행을 저장한다.

 그런 다음, 다른 테이블(일반적으로 더 큰 테이블)의 각 행을 순회하면서 해당 열의 값을 동일한 해시 함수로 해싱한 후, 해시 테이블에서 해당 해시 값에 일치하는 행을 찾는다.

매칭되는 데이터가 있는 경우, 결과에 해당 행을 추가하고, 매칭되는 데이터가 없는 경우 NULL 값을 가진 더미 행을 생성하여 결과에 추가한다.

 해시 아우터 조인은 두 테이블 간의 관계를 파악하지 않고 데이터를 결합하기 때문에 INNER JOIN이나 LEFT JOIN과 같은 다른 종류의 조인과는 달리 특정 조인 키나 관계를 설정할 필요가 없다. 이는 일부 상황에서 유용할 수 있지만, 데이터 일치성과 정확성을 보장하기 위해 주의해야 한다.

 

Sort Merge 아우터 조인

 옵티마이져가 Nested Loops조인으로는 부담이 되는 대량의 데이터이거나 인덱스 등의 문제로 Nested Loops조인으로 수행에 문제가 있을 때 선택할 수 있다. 또한 조건 연산자로 인해 해쉬조인이 불가능할 때이거나 이미 다른 처리에 의해 조인을 위한 정렬이 선행되어 있어서 더 유리해질 때 적용된다.

 내부적인 처리절차는 정상적인 SortMerge 조인과 동일하지만 머지를 수행하면서 기준 집합에 대응하는 집합이 존재하지 않더라도 결과를 리턴하는 부분만 다를 뿐이다. 

 

전체 아우터 조인

 전체 아우터 조인이란 양쪽 집합이 모두 기준집합이면서 대응집합이 되는 아우터 조인을 말한다. 이 조인은 어느 한쪽만을 기준으로 상대를 체크하는 방법으로는 이미 논리적으로 불가능하다. 이러한 조인을 가능하게 하는 방법은 먼저 어느 한쪽을 기준으로 아우터 조인을 수행한 결과와 다른 쪽을 기준으로 부정형 조인을 한 결과를 결합해서 리턴하는 방법이다.

 즉, 어느 한쪽을 외측 테이블로 하여 아우터 조인이 완료되었으면, 이제는 오직 내측 테이블의 집합에만 존재하는 것을 찾아서 추가하면 우리가  원하는 집합을 찾을 수 있다는 것이다. 

 전체 아우터 조인은 두 집합의 '최소 공배수' 집합을 찾는 것이다. 최소 공배수란 양쪽 모두에 있는 것과 어느 한쪽에만 있는 것을 합한 집합이다.

 전체 아우터 조인이라고 해서 전체 테이블 스캔만이 발생하는 것은 아니다. 적절한 인덱스가 있다면 기존의 다양한 엑세스 형태가 모두 나타날 수 있다. 조건의 형태나 인덱스의 구조에 따라서 아우터 조인을 주관하는 테이블과 부정형 조인을 주관하는 테이블의 순서가 달라지면 수행속도가 좋아질 수도 있다.

반응형