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 |