728x90
반응형

SORT/MERGE JOIN의 사용

 

1.연결 고리에 인덱스가 전혀 없는 경우 

2.대용량의 자료를 조인해야 함으로써 인덱스 사용에 따른 랜덤 액세스의 오버헤드가 많은 경우

 

SORT/MERGE JOIN

 

1.각 테이블에 대해 동시에 독립적으로 데이터를 먼저 읽어 들임

2.읽혀진 각 테이블의 데이터를 조인을 위한 연결 고리에 대하여 정렬을 수행함 

3.정렬이 모두 끝난 후에 조인 작업이 수행됨 

 

- 튜닝 포인트 

 

- 각 테이블로부터 데이터를 빨리 읽어 들이도록 함

- 메모리를 최적화함

 

SORT/MERGE JOIN의 장단점

 

1.연결고리에 인덱스가 생성되어 있지 않은 경우에 빠른 조인을 위하여 사용됨

2.조인하고자 하는 각 테이블에 대해서 독립적으로 데이터를 읽어 들일 때 

  이를 얼마나 빠르게 할 것 인가가 중요함 

3.각 테이블로부터 읽혀진 데이터를 연결고리에 대해 정렬을 수행할 때 이를 얼마나 빠르게 할 것인가가 중요함 

 

HASH JOIN 

 

NESTED LOOPS JOIN - 인덱스 사용에 의한 랜덤 액세스의 오버헤드 

SORT/MERGE JOIN - 정렬 작업으로 인한 오버헤드 

 

SORT/MERGE 조인과 비교해 보면 

각 테이블에 대한 처리를 독립적으로 하는 것은 같지만

HASH JOIN에서는 Driving Table이 있음

 

읽어 들인 각 테이블의 데이터를 서로 조인하기 위해 

해싱을 이용해서 해시 값을 만듬

-> 해시 값으로 조인을 수행함

 

튜닝 포인트 

 

- Driving table을 결정함 

- 각 테이블로부터 데이터를 읽어 들일 때, 빨리 읽을 수 있도록 함 

- 메모리를 최적화함 

 

HASH JOIN의 장단점 

 

Hash Bucket이 조인 집합에 구성되어 해시 함수 결과를 저장해야 하는데 이러한 처리에는 많은 메모리와 

CPU자원을 소모하게 됨 

기본적으로 HASH_AREA_SIZE에 지정된 크기만큼의 메모리가 할당되어 사용됨 

 

조인을 수행하기에 메모리가 부족하다면 가장 큰 순서대로 

Hash Bucket에 변경이 일어날 때마다 디스크 I/O가 발생하게 되어 성능이 현저하게 저하됨 

 

하드웨어 자원이 넉넉한 상황에서는 다른 조인에 비해 보다 효율적인 수행이 가능하지만, 부족한 상황에서는 다른 조인 방법보다 오히려 느려질 수 도 있음 

 

정리 

 

SORT/MERGE JOIN을 사용해야 하는 경우 

 

- 연결 고리에 인덱스가 전혀 없는 경우 

- 대용량의 자료를 조인해야 함으로써 인덱스 사용에 따른 랜덤 액세스의 오버해드가 많은 경우 

 

튜닝포인트 

 

- 각 테이블로부터 데이터를 빨리 읽어 들이도록 함 

- 각 테이블로부터 읽어 들인 데이터를 조인하기 전에 정렬을 하는데, 

  이러한 정렬 작업을 빨리 끝낼 수 있도록 함

 

HASH JOIN의 장단점 

 

- Hash Bucket이 조인 집합에 구성되어 해시 함수 결과를 저장해햐야 하는데 이러한 처리에는

많은 메모리와 CPU자원을 소모하게 됨 

- 기본적으로 HASH_AREA_SIZE에 지정된 크기만큼의 메모리가 할당되어 사용됨

조인을 수행하기에 메모리가 부족하다면 가장 큰 순서대로 Hash Bucket이 Temporary Tablespace로 내려가서 구성됨

-> 디스크로 내려간 Hash Bucket에 변경이 일어날 때마다 디스크 I/O가 발생하게 되어 성능이 현저하게 저하됨

 

하드웨어 자원이 넉넉한 상황에서는 다른 조인에 비해 보다 효율적인 수행이 가능하지만 부족한 상황에서는 

다른 조인 방법보다 오히려 느려질 수도 있음 

 

SORT/MERGE JOIN의 수행 절차 

 

1) 각 테이블에 대해 동시에 독립적으로 데이터를 먼저 읽어 들임 

2) 읽혀진 각 테이블의 데이터를 조인을 위한 연결고리에 대하여 정렬을 수행함.

3) 정렬이 모두 끝난 후에 조인 작업이 수행됨 

 

SORT/MERGE JOIN이 불리한 경우

 

- 각 테이블로부터 읽어 들인 데이터를 조인하기 전에 정렬하게 되는데  

   이 때 정렬할 데이터가 지나치게 큰 경우 

- 각 테이블로부터 읽어 들인 데이터의 크기가 매우 큰 경우 

 

SORT/MERGE JOIN의 장단점 

 

장점 : 연결고리에 인덱스가 생성되어 있지 않은 경우에 빠른 조회를 수행할 수 있음

단점 : 각 테이블로부터 읽어 들인 데이터의 크기가 매우 큰 경우 성능상 불리함 

 

HASH JOIN 

 

각 테이블에 대한 처리를 독립적으로 하지만 Hash Join은 Driving Table이 있음

읽어 들인 각 테이블의 데이터를 서로 조인하기 위해 해싱을 이용해서 해시 값을 만들어 조인을 수행함 

튜닝포인트 

 

- Driving Table의 결정 

- 각 테이블로부터 독립적으로 데이터를 읽어 들일 때 빨리 처리하도록 함 

- 해시 조인을 위한 메모리를 최적화함

 

HASH JOIN의 수행 절차 

 

- Driving Table 결정 

- Driving Table의 연결조건 컬럼 해싱 및 해시 값 생성 

- 읽어 들인 데이터와 해싱해서 만들어진 해시 값을 메모리에 저장 

- Hash Join이 적용될 테이블의 연결조건 컬럼 해싱 및 해시 값 생성 

- 읽어 들인 데이터와 해싱에서 만들어진 해시 값을 메모리에 저장 

- 각 테이블에 조인할 데이터가 있는지 조인하고자 만들었던 해시 값 간에 충돌이 있는지 확인 

  -> 충돌이 발생할 경우,2차 해싱 수행 

- 각 테이블의 해시값을 "="로 조인을 수행 

 

HASH JOIN의 장단점

 

장점 : 하드웨어 자원이 넉넉한 상황에서는 다른 조인에 비해 보다 효율적인 수행이 가능 

단점 : 하드웨어 자원이 부족한 상황에서는 다른 조인 방법보다 비효율적임 

 

 

반응형

'IT > DB' 카테고리의 다른 글

[SQL] SUBQUERY,NESTED SUBQUERY  (0) 2021.11.30
[SQL] CARTESIAN PRODUCT  (0) 2021.11.29
[SQL] NESTED LOOPS JOIN 조인  (0) 2021.11.29
[SQL] 인덱스 활용이 불가능한 경우  (0) 2021.11.23
[SQL] 옵티마이저의 개념 및 종류와 인덱스  (0) 2021.11.09

+ Recent posts