레이블이 #HashJoin인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #HashJoin인 게시물을 표시합니다. 모든 게시물 표시

2021년 10월 31일 일요일

오라클 조인방법, 해시 조인(Hash Join)

 

오라클 조인방법, 해시 조인(Hash Join)


해시 조인은 두 테이블 중 한 테이블(Build Input, Driving Table)을 조인키를 기반으로 메모리에 해시테이블을 생성하고 해시테이블 내에 행들을 위치시키기 위해 해시함수를 사용하고 나머지 테이블을 스캔하면서 조인조건을 만족하는 레코드를 찾는 조인방법 입니다.


중첩루프 조인과 같이 조인 시 발생하는 랜덤 액세스에 대한 부하가 없는 조인방식으로 주로 작은 테이블과 큰 테이블의 조인 시 사용 됩니다. 드라이빙 조건과 상관없이 좋은 성능을 발휘할 수 있는 조인 방법이며 대체로 제일 빠른 성능을 보장하므로 비용(COST)이 가장 많이 드는 조인방법 입니다.


해시 조인은 유용한 인덱스가 부족하여 중첩루프 조인이 비효율적 일 때 효과적 일 수 있습니다.


ORDERED 힌트는 FROM절에 나타나는 테이블의 순서대로 왼쪽에서 오른쪽으로 조인을 하라는 힌트이며, USE_HASH 힌트는 HASH JOIN을 하라는 힌트 구문 입니다.


SELECT /*+ ORDERED USE_HASH(E) */ 

              E.empno, E.ename, D.dname

FROM    dept D, emp E

WHERE D.deptno = E.deptno

 

DEPT 테이블(Build Input, Driving Table)을 먼저 조인키를 기반으로 메모리에 해시테이블을 생성하고 해시테이블 내에 행들을 위치시키기 위해 해시함수를 사용 합니다. 이후 나머지 테이블(Probe Input, Driven Table)을 스캔하면서 조인조건을 만족하는 레코드를 찾는 조인방법 입니다.


q0wm2w0ZSVmXzWJ9Bt9Dne1iV4a1ff-8NllRMjkP



<실행 순서>

1. ORDERED 힌트 구문에 따라 DEPT 테이블이 선행 테이블로 메모리에 올라가서 해시 테이블로 만들어 집니다.


2. 후행 테이블 EMP 테이블을 읽어 메모리에 있는 해시 테이블과 조인 키를 비교 합니다.

DEPT 테이블의 부서코드(deptno) 값은 10, 20, 30, 40 값을 가지므로 하나씩 EMP 테이블의 deptno 컬럼과 비교하여 조건에 맞는 데이터를 추출 합니다.


해시 조인에서는 선행 테이블을 Build Input, 후행 테이블을 Probe Input 이라고 합니다.

 

해시 조인은 범위 검색(Range scan)이 아닌 등가 비교(Equi-Join, where절에서 등호로 비교하는 경우)에 더 적합 합니다. 선행 테이블인 Build Input이 Hash Area에 담길 정도로 충분히 작아야 하고 Build Input 해시 키 컬럼에 중복 값이 거의 없어야 좋은 성능을 냅니다.


소트 머지 조인하기에는 두 테이블이 너무 커서 소트 부하가 심할 때 유리하며 수행 빈도가 낮고 쿼리 수행 시간이 오래 걸리는 대용량 테이블을 조인 할 때 좋습니다. 해시테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 곧바로 소멸하는 자료구조 입니다.

 

#오라클강좌, #오라클조인, #오라클해시조인, #해시조인, #HashJoin, #SQL #SQL교육, #오라클, #오라클교육, #오라클강의

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...