"해시 조인 HASH"의 두 판 사이의 차이
DB CAFE
잔글 (Dbcafe님이 USE HASH 힌트 문서를 해시 조인 HASH 문서로 이동했습니다: 해시 조인 HASH) |
(→HASH 조인(HASH JOIN)) |
||
3번째 줄: | 3번째 줄: | ||
해시 함수를 이용하여 조직 테이블(데이터 작은쪽)에 해시테이블을 만들고 실적집계 테이블(데이터 많은쪽)을 탐색하면서 조인. | 해시 함수를 이용하여 조직 테이블(데이터 작은쪽)에 해시테이블을 만들고 실적집계 테이블(데이터 많은쪽)을 탐색하면서 조인. | ||
</source> | </source> | ||
+ | https://dataonair.or.kr/publishing/img/knowledge/SQL_361.jpg | ||
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a67781/c20c_ja2.gif | https://docs.oracle.com/cd/F49540_01/DOC/server.815/a67781/c20c_ja2.gif | ||
2023년 4월 4일 (화) 15:06 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 HASH 조인(HASH JOIN)[편집]
해시 함수를 이용하여 조직 테이블(데이터 작은쪽)에 해시테이블을 만들고 실적집계 테이블(데이터 많은쪽)을 탐색하면서 조인.
- Hash Join에서는 작은 테이블을 먼저 접근하는 것이 성능이 좋음(해시테이블을 빨리 build 하기때문).
이후 큰 테이블을 접근하여 해시 함수를 사용해서 순차적으로 해시 테이블로 탐색 한다.
- 대량 데이터를 처리하는 배치성 프로그램에 적합한 조인 방식.
1.1 HASH JOIN 예시[편집]
SELECT /*+ USE_HASH(B) */
A.조직명,A.조직코드,SUM(B.실적),...
FROM 조직 A
, 실적집계 B
WHERE A.조직코드 = B.조직코드. -- hash 함수를 사용 하여 해시키 생성 후 조인
AND A.사업부 = 'ㅇ사업부서명'. -- index를 사용 하여 성능 개선
AND B.집계년월 = '201908' -- index를 사용 하여 성능 개선
GROUP BY A.조직명,A.조직코드
(설명)
1. 조직 테이블(A)에서 사업부가 ‘ㅇ사업부서명’조회 후, 조인 컬럼인 조직코드를 해시 함수로 분류한 다음, 해시테이블 을 생성. (Build Input , 해시 함수를 이용해 해시 테이블 구성)
2. 실적집계 테이블(B) 에서 집계년월이 ‘201908’를 조회 후, 조인 컬럼인 조직코드를 해시 함수로 변환 후 해시 테이블로 순차 적으로 접근한다. (Probe Input 해시 함수를 통하여 해시 테이블을 탐색)
- 조회 조건 컬럼인 A.사업부 컬럼과 B.집계년월 컬럼의 인덱스를 사용하여 성능을 개선하고 ,
- 조인 컬럼인 A.조직코드 = B.조직코드는 인덱스가 존재하더라도 사용되지 않는다.