티스토리 뷰
3-4. JOIN - HASH JOIN
HASH JOIN의 개념
Nested Loops 조인과 Sort Merge 조인에 의한 성능을 보다 개선시킬 수 있기 위해 사용
☞ Nested Loops 조인은 인덱스 사용에 의한 랜덤 액세스의 오버헤드가 있으며, Sort Merge 조인은 Sort operation 으로 인한 오버헤드가 있음
1. Sort Merge 조인과 비교해 보면, 각 테이블에 대한 처리를 독립적으로 하는 것은 같지만 Hash 조인에서는 Driving Table이 있다. 이는 HASH_AREA_SIZE에 의해 결정되며 주로 작은 테이블이 Driving Table로 사용된다.
2. 읽혀진 각 테이블의 데이터를 조인하기 위해서 Hash Algorithm을 사용
Oracle에서는 7.3 버전부터 소개되었지만 잘 사용되지 않다가 8 버전 이후에는 많이 사용되고 있음
Hash Bucket이 조인 집합에 구성되어 해시 함수 결과를 저장 하여야 하는데 이러한 처리에는 많은 메모리와 CPU 자원을 소모하게 됩니다. 기본적으로 HASH_AREA_SIZE에 지정된 크기 만큼의 메모리가 할당되어 사용되지만, 조인을 수행하기에 메모리가 부족하다면 가장 큰 순서대로 Hash Bucket이 Temporary Tablespace로 내려가서 구성됩니다. 이와 같이 디스크로 내려간 Hash Bucket에 변경이 일어날 때마다 디스크 I/O가 발생하게 되어 성능이 현저하게 저하됩니다.
따라서, 하드웨어 자원이 넉넉한 상황에서는 다른 조인에 비해 보다 효율적인 수행이 가능하지만 부족한 상황에서는 다른 조인 방법보다 오히려 느려질 수도 있습니다.
HASH JOIN의 장단점
① CBO 모드에서 옵티마이저가 판단해서 적용할 수 있으며, 테이블의 통계 정보가 있어야 한다.
② 데이터베이스 또는 현재 세션에 옵티마이저 모드가 RULE
이외의 값으로 설정되어야 한다.
③ 통계 정보가 없는 경우에도 옵티마이저 힌트
(/*+ ORDERED USE_HASH(tab1 tab2) */)를 사용하면 Hash 조인을 사용하도록 유도할 수 있다.
④ Hash 조인은 Equi Join에서만 가능하다.
⑤ Driving Table의 row 를 조인하기 위한 연결고리에 대한 인덱스를 꼭 필요로 하지는 않는다.
⑥ 주로 방대한 처리 결과가 요구되는 OLTP 시스템이나 데이터웨어하우스에서 사용한다.
⑦ 많은 하드웨어의 CPU와 메모리 자원이 필요하다.
HASH JOIN 파라미터
조인방식
Hash
Parameters
HASH_JOIN_ENABLED HASH_AREA_SIZE
'It' 카테고리의 다른 글
3-3. JOIN - SORT MERGE JOIN (0) | 2023.04.26 |
---|---|
3-2. JOIN - DRIVING TABLE (0) | 2023.04.25 |
비주얼베이직 명시적 선언과 묵시적 선언 (0) | 2023.04.23 |
비주얼베이직 연산자 (0) | 2023.04.22 |
비주얼베이직 제어문 (if, while, for) (0) | 2023.04.21 |