티스토리 뷰

It

3-4. JOIN - HASH JOIN

poupdat 2023. 4. 24. 16:39

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
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함