Akashic Records

Big3 Join 본문

오래된글/DataBase

Big3 Join

Andrew's Akashic Records 2018. 4. 15. 22:26
728x90

Big3 Join


구분

Nested Loop Join

Hash Join

Sort Merge Join

Optimizer

Hint

USE_NL(Table | Alias)

USE_HASH(Table | Alias)

USE_MERGE(Table | Alias)

조인조건

Any Join

Equal 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 방식을 주로 사용하지 않음


728x90

'오래된글 > DataBase' 카테고리의 다른 글

Chapter 2 Oracle 객체 - PLT 2.1 Table  (0) 2018.04.15
Chapter 1 Oracle Server  (0) 2018.04.15
ANSI/X3/SPARC  (0) 2018.04.15
Analytical Function  (0) 2018.04.15
행을 열로 확장  (0) 2018.04.15
Comments