336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
제 2절 조인
조인은 카티션 프로덕트를 실행 후 셀렉션과 프로젝션을 수행하는 데이터베이스의 연산
종류: Nested loops 조인, Sort merge 조인, Hash 조인, Hybrid 조인, Star 조인, Semi 조인
연산자 기준 구분: equi조인, between 조인
집합 기준 구분: inner 조인, Outer 조인
INNER JOIN: 비교값이 일치하는 데이터만 조회
OUTER JOIN: 조회 조건에 일치하는 모든 값과 OUTER TABLE의 나머지 값.
1.Nested-Loop 조인
- 두 집합을 카티션 프로덕트 형태로 모든 튜픙르 열거한 다음, 조인에 만족하지 않는 튜플을 제거하는 알고리즘
즉 사원 * 부서 인 경우 부서테이블 200개를 10000번 읽어야 함.
outer에 정의된 row만큼 반복적으로 액세스 하므로 수행속도가 저하된다.
Indexed Nested-Loop
inner 집합에 정의된 인덱스를 사용하므로 속도가 향상된다.
조인조건: indexed Nested-join으로 수행되려면 inner table의 조회조건에 반드시 인덱스가 존재해야 함.
인덱스가 없으면 sort-merge나 hash 조인이 수행될 것이다.
출력순서: 드라이빙 테이블을 액세스한 순서와동일하다
조인순서: 조인 시에 먼저 드라이빙 테이블을 결정하고 나머지 잡합의 조인순서를 결정한다.
드라이빙 범위가 가장 작은 집합을 선정, 조인의 효율이 좋은 집합(row수가 적은 집함)을 조인에 참여시킴,
왜냐하면 선행 집합의 결과가 다른 집합의 결과에 영향을 미치기 때문이다.
성능에 관련된 규칙
- 드라이빙 조건의 범위가 좁은 경우는 항상 성능이 양호하다.
- 드라이빙 조건의 범위가 넓은 경우는 체크조건도 검색범위가 넓어야 성능이 양호하다. (부분범위처리시 운반단위(추출버퍼)가 채워질 때까지만 수행하고 일단 멈춘다.)
(sql 수행가이드 참조할 것)
sort merge 조인
- 조인하려는 두 집합을 조인 속성으로 정렬하여 sorted lists를 만든 후 이를 merge하는 조인 기겁
인덱스가 없을 때 simple Nested-Loop 조인의 비효율을 개선하기 위해 고안됨.
인덱스가 없을 경우 좋은 성능을 나타낸다.
조인조건: 조인 속성에 인덱스가 없을 경우 주로 발생한다.
출력 및 연결 순서: outer 집합 의 정렬 순서와 inner 집합의 정렬 순서가 머지되어 출력된다.
선행 집합의 조인 결과가 다음 조인에 참여하는 집합의 작업량에 영향을 미치므로 조인 효율이 조흔 입합을 조인에 먼저 참여시켜야 전체적인 조인 성능이 좋아지게 된다.
조건절: 소트에 참여하는 row의 수에 의해 수행속도가 결정된다.
정렬 시간이 많이 소요되므로 OLTP에서 사용할 수 없다.
Sort Area를 확보해야 한다.
이용: 독립적으로 처리범위를 줄인 후조인에 참여하므로 테이블 가각의 조건에 의해 대상 집합을 줄일 수 있을 때 유리하다.
처리대상이 전체 테이블일 때 랜텀 IO부하가 큰 Nested-loop 조인보다 유리하다
조인속성에 인덱스가 없을 때 simple nested loop 조인보다 성능이 우수하다.
효과적인 수행을 위해 적절한 sort area size 확보가 필요하다.
정렬에 대한 부하가 많이 발생하므로 대용량 처리 시 수행 속도가 저하될 수 있다
Hash 조인
대용량 데이터 조인 시 sort-merge나 nested loop 보다 좋은 성능을 나타낸다.
조인에 참여한 두 집합 중 작은 집합의 해쉬 테이블을 메모리상에 만들고 큰 집합은 조인을 위해 해쉬테이블을 참침한다.
이용가능한 메뮤리가 작은집합을 유지할 정도로 충분하지 않다면 Hash area 오버플로우가 발생한다.
하이브리드 조인
- nested loop 와 sort merge 조인의 알고리즘을 혼합한 개념
Outer join 예시:
TABLE A | |||
사번 | 부서 | 이름 | 직급 |
A100 | 인사부 | 김유신 | 대리 |
A101 | 총무부 | 홍길동 | 주임 |
A102 | 총무부 | 전우치 | 과장 |
A103 | 영업부 | 이순신 | 대리 |
A104 | 회계부 | 강감찬 | 대리 |
A105 | 생산부 | 을지문덕 | 부장 |
TABLE B | ||
부서 | 부서상세 | 부서장 |
인사부 | 1부 | 강호동 |
영업부 | 1부 | 이승엽 |
영업부 | 2부 | 이상민 |
회계부 | 1부 | 서장훈 |
outer join 시
SELECT * FROM a LEFT OUTER JOIN b ON a.부서= b.부서
a를 기준으로 b를 조회한다 즉 아래와 같이 조회된다.
사번 | 부서 | 이름 | 직급 | 부서 | 부서상세 | 부서장 |
A100 | 인사부 | 김유신 | 대리 | 인사부 | 1부 | 강호동 |
A103 | 영업부 | 이순신 | 대리 | 영업부 | 1부 | 이승엽 |
A103 | 영업부 | 이순신 | 대리 | 영업부 | 2부 | 이상민 |
A104 | 회계부 | 강감찬 | 대리 | 회계부 | 1부 | 서장훈 |
A105 | 생산부 | 을지문덕 | 부장 | |||
A101 | 총무부 | 홍길동 | 주임 | |||
A102 | 총무부 | 전우치 | 과장 |
'DAP' 카테고리의 다른 글
실행계획 보기 (0) | 2013.12.05 |
---|---|
dap 관련 인터넷 참고 자료2 (0) | 2013.02.08 |