DB/SQL튜닝

업무에 바로 쓰는 SQL튜닝 입문 - 7교시(SORT/MERGE/HASH 조인)

Kang_hobin 2022. 9. 27. 21:39

사전문제

1. 소트머지(Sort Merge) 조인은 조인 순서 제어가 중요한 튜닝 포인트 중 하나인가?

X : Sort Merge 조인에서는 Driving Table이 없이 각 테이블로부터 동시에 데이터를 처리하기 때문에 조인순서 상관없다!

2. 해시(Hash) 조인은 Driving Table이 없다.

X : 해시(Hash) 조인은 Driving Table로부터 생성한 Hash Table의 데이터와 Inner Table 데이터의 해시 값을 조인하는 방식으로, Driving Table이 있다.

 

1. Sort/Merge Join

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

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

- 조인 되는 순서!

1. Driving Table이 없다! 각각 동시에 데이터를 읽어 들인다.

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

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

 

튜닝 포인트

각 테이블로부터 데이터를 빨리 읽어 들이도록 한다.

정렬을 수행하므로 메모리를(SORT_AREA_SIZE)를 최적화한다.

 

- Sort/Merge Join이 불리한 경우

조인 테이블들이 데이터 양이 크게 차이날 경우!

한쪽의 Sorting을 대기해야하므로!

 

장점 :

1. 연결고리에 인덱스가 없어도 빠른 조인이 가능!

2. 조인하고자 하는 각 테이블에 대하여 독립적으로 읽어 들일 때 얼마나 빠르게 할 지가 중요함

3. 각 테이블의 정렬을 수행하는 것을 얼마나 빠르게 할 것인지가 중요함!

 

 

NESTED LOOPS JOIN, SORT/MERGE JOIN 두가지 모두 어렵다면!

드디어 Hash 조인이 나온다..

 

2. Hash Join

각 테이블로부터 데이터를 각각 읽으나, Hash Join은 Driving이 있음!

읽어 들인 각 테이블의 데이터를 서로 조인하기 위해 Hash 값을 만듦!

그걸로 조인을 수행함!

 

따라서 튜닝 포인트는 아래와 같다.

1. Driving 테이블 결정!

2. 메모리(HASH_AREA_SIZE)를 최적화 함! 저게 크다면 오히려 큰 테이블을 Driving으로 선택하는게 더 빨라질 수 있음!

여기서 HASH_AREA_SIZE는 MERGE에서의 SORT_AREA_SIZE의 두배임.

메모리를 많이 사용하는 대신 메모리만 빵빵하다면 빠르다는 것!

HASH_AREA_SIZE가 모자라면 디스크I/O가 일어나게 되므로 성능이 현저하게 저하됨.

가장 큰 장단점임!