시그마 삽질==six 시그마

'친절한 SQL 튜닝' 요약정리 6탄: 조인 튜닝(해시 조인) 본문

프로그래밍/Database

'친절한 SQL 튜닝' 요약정리 6탄: 조인 튜닝(해시 조인)

Ethan Matthew Hunt 2020. 3. 21. 16:56
(주)디비안 조시형 대표님의  '친절한 SQL 튜닝의 바이블'  

구입하시길 강력 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

-저자 소개
現) 주식회사 디비안 대표이사 
오라클 성능 고도화 원리와 해법 1, 2 저자 
국가공인 SQLP, DAP 자격검정 전문위원
한국데이터진흥원과 한국DB산업협의회가 공동 주관하는 제1회 우수DB人상을 수상
인터넷 카페 디비안 포럼(WWW.DBIAN.NET) 운영
前) 이랜드, 인슈넷, 디엠에스랩, 엔코아, 비투엔


하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.

 

 

4.3 해시조인

 

해시조인도 소트 머지 조인처럼 두단계로 진행됨

 

1.빌드단계 : 작은 테이블을 읽어 해시 테이블을 생성

 

조건에 해당하는 사원 데이터를 읽어 해시 테이블을 생성

이때 조인컬럼인 사원번호를 해시 테이블 키 값으로 사용

즉 사원번호를 해시 함수에 입력해서 변환된 값으로 해시 체인을 찾고 그 해시 체인에 데이터를 연결

해시 테이블은 pga 영역에 할당된 hash aarea에 저장

f(‘사원번호해시테이블 키) => 해시 체인 나옴 요기에 데이터 연결!!

 

select e.사원번호, e.사원명, e.

from 사원 e

e.입사일자 >=’19960101’

and e.부서코드 = ‘z123’

 

 

2. 프로브단계 :큰쪽 테이블을 읽어 해시 테이블을 탐색하면서 조인

 

아래 조건에 해당하는 고객 데이터를 하나씩 읽어 앞서 생성한 해시 테이블을 탐색

즉 관리사원번호를 해시 함수에 입력해서 반환된 값으로 해시 체인을 찾고, 그 해시 체인을 스캔해서 값이 같은 사원번호를 찾음

찾으면 조인에 성공한것이고 못찾으면 실패한것

f(‘관리사원번호해시테이블 키) => 사원테이블과 동일한 해시 체인 나옴->이걸 사원해시테이블에서 찾아다가 값이 같은 사원번호를 찾음.

 

select c.고객번호 , c.고객명, c.전화번호, c.최종주문금액

from 고객 c

where c.최종주문금액 >=20000

 

빌드단계에서 사용한 해시 함수를 프로브단계에서도 사용하므로 같은 사원번호를 입력하면 같은 해시 값을 반환  따라서 해시 함수가 반환한 값에 해당하는 해시 체인만 스캔하면됨

 

 

소트머지처럼 해시 테이블도 pga 영역에 할당하기 때문에 nl조인보다 빠름

 

대량 데이터를 조인할 때 일반적으로 해시 조인이 더 빠르다  이유는?

소트 머지 조인은 사전 준비작업은 양쪽 집합을 모두 정렬해서 pga에 담는 작업임.pga 는 그리 큰 메모리 공간이 아니므로 두 집합 중 어느 하나가 중대형 이상이면 temp 테이블스페이스 , 즉 디스크에 쓰는 작업을 바드시 수반

 

해시 조인에서 사전 준비작업은 양쪽 집합 중 어느 한쪽을 읽어 해시 맵을 만드는 작업임. 해시 조인은 둘 중 작은 집합을 해시 맵으로 선택하므로 두 집합 모두 hash area에 담을 수 없을 정도로 큰 경우가 아니면 temp 테이블 스페이스 즉 디스크에 쓰는 작업은 전혀 일어나지 않음

 

4.3.2 조인 메소드의 선택기준

 

소량데이터 조인 ?

yes->nl조인

no -> 조인조건식이 등치? 

        yes-> 해시조인

        no-> 소트머지 조인

Comments