2018년 12월 28일
데이터베이스 조인(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튜닝은 필수적