[SQLP] Hash Join 정리
해시 조인
해시 조인은 둘 중 작은 집합(Build input)을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합(Probe input)을 읽어 해시 테이블을 담색하면서 조인하는 방식으로 소트머지조인과 NL조인이 효과적이지 못할 때 사용
1. 기본 메커니즘
1) Build 단계 : 작은 쪽 테이블(Build Input)을 읽어 해시테이블(해시맵) 생성
2) Probe 단계 : 큰 쪽 테이블(Probe Input)을 읽어 해시맵을 탐색하면서 조인
2. 플랜 읽는 법
3. Hash 조인의 Build INPUT 처리
1) 2개의 테이블 조인에서는 leading이나 ordered 힌트에 의해 먼저 읽는 첫번째 테이블이 BUILD input
2) Swap_join_inputs / no_swap_join_inputs 힌트 활용하여 build input 선정
4. Hash 조인 특징
1) 해시테이블을 PGA 영역에 할당하여 래치 획득 과정없이 데이터 탐색
2) 작은 쪽 집합을 읽어 Hash Area에 저장하므로, 디스크 쓰는 작업이 거의 일어나지않음. ( Hash Area 벗어날 정도로 큰 경우 성능 저하)
3) 해시 조인도 Build Input 과 Probe Input 각 테이블을 읽을 때 DB 버퍼캐시를 경유하고 인덱스를 이용하기도 한다.
5. Hash Join 성능포인트
1) 한 쪽 테이블이 Hash Area에 담길 정도로 충분히 작아야 함
( Hash Area 벗어날 정도로 큰 경우 Disk I/O 발생, 성능 저하)
2) Build Input 해시 키 컬럼에 중복 값이 거의 없어야 함
( 중복값이 많다면 하나의 버킷에 많은 엔트리가 달리고 해시버킷 스캔하는 과정에서 성능 저하)
6. Hash Join 사용이 효과적일 때
1) 소트 머지 조인을 사용하기엔 두 테이블이 커 소트부하가 클때
2) NL조인에서 inner쪽 테이블 로의 조인액세스량이 많아 random 액세스 부하가 심할때
3) 조인 조건 컬럼에 적절한 인덱스가 없어 NL조인 비효율
4) 쿼리수행시간 ↑, 수행빈도 ↓, 배치성, DW/OLAP성 대량데이터 조인