2011년 6월 1일 수요일

Big3 Join

Big3 Join

구분Nested Loop JoinHash JoinSort Merge Join
Optimizer
Hint
USE_NL(Table | Alias)USE_HASH(Table | Alias)USE_MERGE(Table | Alias)
조인조건Any JoinEqual Join 만 가능Any Join(주로 Equal Join)
init.ora
Parameter
.DB_BLOCK_BUFFERS
.INDEX_COST_ADJUST
.OPTIMIZER_INDEX_CACHING
.HASH_JOIN_ENABLED
.HASH_AREA_SIZE
.HASH_MULTIBLOCK_IO_COUNT
.SORT_AREA_SIZE
.DB_FILE_MULTIBLOCK_READ_COUNT
특징- 드라이빙 테이블의 Row 수가 적거나, 조인의 연결 고리에 적절한 액세스 경로가 있는 경우 효율적
- Sort Merge 또는 Hash 조인에 비해 FIRST_ROWS  방식이 효율적
- 조인 연결 고리 인덱스가 없거나, 조인 집합을 구성하는 검색 조건이 조인 범위를 줄여 주지 못하는 경우 효율적
- 일반적으로 Sort Merge 조인보다 수행 성능이 좋음
- 조인 연결 고리 인덱스가 없거나, 조인 집합을 구성하는 검색 조건이 조인 범위를줄여 주지 못하는 경우 효율적
- 제한된 메모리로도 실행가능
단점- 조인 연결 고리 인덱스가 없거나, 조인 집합을 구성하는 검색 조건이 조인 범위를 줄여주지 못할 경우 비효율적- HASH 테이블을 위한 많은 CPU, 메모리가 필요
- FIRST_ROWS를 항상 빠르게 출력하는 것은 아님
- 조인이 되는 두 집합을 모두 정렬해야 함
- FIRST_ROWS 보다는 ALL_ROWS 방식을 위해 설계됨



NESTED LOOP JOIN
  • 두 개 이상의 테이블에서 , 하나의 집합을 기준으로 순차적으로 상대방 테이블의 Row를 결합하여 원하는 결과를 추출하는 테이블 연결 방식
  • 결합하기 위해 기준이 되는 테이블 : Driving 테이블
  • 결합되어지는 테이블 : Driven 테이블
  • NL 조인에서는 드라이빙 테이블의 각 ROW에 대하여 LOOP 방식으로 조인이 되는데 드라이빙 테이블의 집합을 어느 정도 줄일 수 있는가에 따라 NL 조인의 성능이 결정됨
  • 드라이빙 테이블을 적절하게 선택하여 조인의 회수를 줄일 수 있다면 NL 조인이 성능은 훨씬 개선될 것이다.
  • 연결 고리 인텍스에 조인을 한 후, 랜덤 액세스에 의하여 Row 값을 읽음, 인덱스에서 읽은 ROWID에 의해 ROW를 검색하기 위해 한 데이터 블록을 통째로 읽음.


NESTED LOOP JOIN의 단점
  • 데이터를 랜덤 액세스에 의하여 접근하기 때문에 그 결과 집합이 많다면 수행 속도가 저하
  • 드라이빙 테이블은 테이블의 크기가 작거나, WHERE 절 조건을 사용하여 적절히 결과 집합을 제한 할수 있어야 함
  • 연결이 되는 테이블인 드리븐 테이블에는 조인을 위한 적절한 인덱스가 생성되어 있어야 함. 연결 고리가 정상적이지 않은 상태에서는 속도가 현저하게 저하될 수 있으며, 이런 경우 Sort Merge, Hash 조인이 좋음
  • 연결 고리가 되는 컬럼은 Unique 한 속성을 가진 컬럼 인텍스를 이용하거나 분포도가 좋은 컬럼에 대한 인덱스를 이용할수록 수행 속도는 향상됨


HASH JOIN
  • 정력되어 있지 않은 데이터들에 해시 함수를 적용하여 각 자료를 Hadh Bucket으로 나우어 담는다면 같은 값을 가진 자료는 같은 Hash Bucket에 모이게 되어 정력을 수행하지 않고도 보다 효율적으로 상태 집합을 검색 할수 있다.
  • 대용량 처리의 선결조건인 랜덤 액세스와 정렬에 대한 문제 개선과 HW의 선을 개선을 통해 각 조인 집합을 한 번 스캔하여 처리하기 때문에 디스크 액세스 면에서도 훨씬 효율적임

SORT MERGE JOIN
  • 읽혀진 두 테이블의 조인집합은 연결 고리 컬럼에 대하여 각각 정렬을 수행한 후 조인 작업이 수행됨
  • 정렬 수행을 위한 공간은 세션에 정의된 SORT_AREA_SIZE의 크기만큼 메모리를 할당 받아 사용
  • 조인 집합을 정렬하기에 메모리가 부족하다면 정렬 자료가 Temporary 테이블 스페이스에서 정렬을 수행하게 됨 이는 디스크 I/O가 발생하여 성능을 저하시키는 주요 원인이 됨
  • 조인의 연결 고리 정보에 대하여 일치 여부를 빠르게 확인할 수 있는 인덱스가 없기 때문에 두 집합을 정렬하여 지그재그 계단식 비교를 수행함.
  • 두 조인 집합의 크기가 많이 차이 난다면 두 집합을 정렬하는 시간차이가 발생하여 정렬이 완료되기 전까지는 조인 작업을 시작할 수 없기 때문에 대기 시간이 발생함
  • 빠른 응답이 필요한 프로그램에서는 Sort Merge Join 방식을 주로 사용하지 않음

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...