데이터베이스 조인(Join) 유형

I. 조인의 개념

한 데이터베이스 내 여러 테이블을 조합하여 하나의 테이블로써 사용하기 위한 조합 방법

 

II. 조인의 유형

가. 논리적 조인의 종류

조인 종류설명
Inner Join– 두 개의 관련 키로 컬럼 비교
– 조인 조건에 맞는 행만 검색
Outer Join– 조인 키에 대응되는 row가 없는 경우 null로 추출 (LEFT, RIGHT, FULL)
Natural Join– 두 테이블의 공통 속성을 매개체로 테이블의 정보를 묶어내는 연산
Equal Join– 두 테이블의 공통 정보 조인 연산
– 단순 조인 또는 내부 조인
Cross Join– 모든 테이블의 모든 조합을 결과 포함
– 연결된 테이블의 Cartesian 곱 반환
Semi Join– 조인 시 특정 조건에 부합 시 중단
– 조건에 따라 연산 수행 여부 결정

나. 물리적 조인의 방식

조인 방식설명
Nested loops Join– 가장 많이 사용하는 기본 조인 방식
– 선수행 범위가 중요, 후수행 랜덤액세스
Sort Merge Join– 정렬 후 조인 수행 방식
– 조인은 효과적, 정렬에 대한 부담 존재
Hash Join– 해시함수 기법 활용한 조인 방식
– 일반적으로 좋은 성능 수준
Cartesian Join– 전체 x 전체 또는 M:M 조인 방식
– 일반적으로 조인 순서 잘못된 경우 발생
Index Join– 인덱스 존재 시 인덱스 간 해시 조인을 통해 액세스하는 기법

 

III. 조인 성능 향상 위한 기법 및 사례

가. 조인 성능 향상 기법

유형기법설명
일반성능
향상기법
Index 전략– Where 조건 인덱스 사용
– Index가 적용된 컬럼은 가공 불가
Outer 조인 제거– 꼭 필요한 경우가 아니면 불필요한 Outer 조인은 남발하지 않음
연결 고리 상태– 정상 시 범위 줄이는 조인 먼저처리
– 이상 시 이상 테이블 먼저 처리
조인 순서– 조인 집합의 처리 범위 순서 영향
– 가장 적은 범위 테이블이 먼저 수행
조인 성공률– 세 개 이상의 집합 효율은 조인 성공률 낮은 집합 조인 먼저 수행 유리
수행
알고리즘
Nested Loop Join– 선행 조건의 선행 테이블 조건 감소
– 후행테이블 연결없으면 인덱스 생성
Sort Merge Join– 조인 테이블 처리결과 유사필요
– DW 등 대량 데이터 처리업무활용
Hash Join– 두 테이블의 Hash Area 사이즈 조정
– 테이블 크기 차이 현저할 경우 적합

나. 조인 성능 향상 사례

사례상세 내용
Nested Loop
Join-hint사용
SELECT e.empno FROM emp e, dept d
WHERE e.deptno = d.deptno and sal > 500
– 선행 테이블(emp)의 조건절(sal)을 통해 조건 감소 후 후행 테이블(dept)과 조인 연결 통해 성능 향상
인라인뷰
사용
SELECT x.A y.B FROM
(SELECT a, b FROM T1 WHERE W1=’10’
ORDER BY O2) x, T2 y
WHERE y.k1 = x.k2;
– 인라인뷰로 W1=’10’을 모두 O2로 정렬 후 조인을 수행하며 개선

 

IV. 조인 사용 시 고려사항

고려사항설명
SQL 문장 의미 파악– 어떤 질의를 수행할 것인지 정의
– 목적에 따른 비효율을 제거
효과적인 인덱스 활용– 인덱스를 활용하면 조인연산 비용 감소
– 조인연산 비용을 위한 적극 인덱스 활용
조인 적용 후 테스트 수행– 여러 테이블 조인 시 이상 결과 초래
– 각 조인 별도 테스트 시 쉬운 해결 가능
조인 대상 최소화– 조인 대상의 집합 최소화를 먼저 수행
– 관계 집합 최소화가 연산에 가장 중요

– 조인 성능에 따라 데이터베이스 성능이 달라지므로 조인 관련 SQL튜닝은 필수적

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^