IT 이야기/데이터베이스

조인(Join)의 종류

필넷 2008. 9. 5. 17:58
반응형
○ 조인(Join)의 종류


Nested Loops Join

Sort Merge Join

개요

° 선행 테이블의 어떤 범위의 집합(Outer)의 각 로우에 대하여 연결고리를 통해 반복적으로 대응되는 로우를 탐침(Iteration)한다

° 두 개의 집합을 정렬하여 스캔하면서 연결 작업을 수행한다

특징

° 선행 테이블의 처리범위가 일의 양을 결정
° 반복 수행되는 연결 작업이 랜덤 액세스로 발생
° 조인의 순서는 가능하면 'M' 집합을 나중에 처리
° 부분범위 처리가 가능
° 조인의 순서가 중요함(방향성)

° 연결고리에 마땅한 인덱스가 없는 경우
° 대상 범위가 넓을 때 발생하는 랜덤 액세스를 부정적인 영향을 줄이기 위한 경우
° 정렬을 해야 한다는 부담이 발생함
° 정렬 후에 조인을 시작하므로 항상 전체범위 처리를 한다
° 조인의 순서와 관련이 없다(무방향성)
° 연결고리의 비교연산자가 LIKE, BETWEEN, <, <=, >, >= 인 경우 Nested Loops Join보다 유리한 경우가 많다


Hash Join

Semi Join(Sub-Query)

개요

° 해슁함수 기법을 이용하여 조인을 수행하여 대용량 처리의 선결조건인 랜덤과 정렬에 대한 부담을 해결할 수 있는 대안으로 등장

° 분산질의를 효율적으로 수행하기 위해 도입된 개념

° 다른 사이트에 테이블 전송하기 전에 조인에 필요한 속성만을 프로젝션하여 전송, 조인에 성공한 로우만 재전송함으로서 네트워크를 통해 전송되는 데이터의 양을 줄이고자하는 개념으로 도입

특징

° Hash Join은 동치조인(EquiJoin)일 때만 가능
° 대량 범위에 대한 조인이나 테이블이 너무 많은 조각으로 산재되어 있을 때 특히 유리함
° Sort Merge Join과의 차이는 Hash Join은 추가적인 정렬 작업이 필요할 수도 있다는 점
° In-memory Hash Join - 빌드입력이 해쉬영역에 모두 위치할 수 있을 때 수행
° In-memory Hash Join은 부분범위 처리가 가능하다
° 유예 Hash Join - 빌드입력이 해쉬영역을 초과할 때 수행

° Sub-Query는 주종관계를 형성한다(교환법칙이 성립 안됨)
° 결과집합을 메인쿼리의 집합과 동일하게 유지하기 위해 약간의 추가적인 처리단게가 필요함
° Sub-Query는 메인쿼리의 속성을 사용할 수 있지만, 메인쿼리는 Sub-Query의 속성을 사용할 수 없다.
° Semi Join은 교환적이지 않음(R⋉S ≠ S⋉R)
° R(X), S(Y)의 조인 속성을 X ∩ Y라 하면, 릴레이션 R(X)에 대해 S(Y)의 세미조인 한 결과 (R⋉S)

  - R⋉S = R⋈ N(∏X∩Y(S))  - ①
         = ∏X(R⋈NS) - ②
①는 S를 프로젝션 한 결과에 R과 자연조인 한 결과
②는 R과 S를 자연조인 한 결과에 R의 속성만 프로젝션한 결과


Star Join

Star Transformation Join

개요

° 디멘젼 테이블의 카티젼 곱과 팩트 테이블의 조인

° 비트맵 인덱스의 특성을 살린 Star Join

특징

° 일반적으로 데이터웨어하우스에 활용
° 실행계획의 한 형태일 뿐임
° 여러 개의 디멘젼 테이블들이 대량의 팩트 테이블과 각기 한번씩 조인을 일으키지 않도록 함
° 디멘젼의 카티젼 곱이 너무 클 때는 사용해서는 안됨

° 디멘젼의 카티젼 곱이 너무 크거나, 팩트집합의 처리 범위를 제대로 줄여주지 못할 때 사용
° 비트맵 인덱스를 활용하여 다양한 결합 인덱스를 가지고 있어야 하는 단점을 해결


반응형