관리 메뉴

SIMPLE & UNIQUE

해시조인(Hash Join) - 대용량 자료전환 시 튜닝 포인트 본문

oracle

해시조인(Hash Join) - 대용량 자료전환 시 튜닝 포인트

착한코딩 2017. 4. 17. 11:36

해시조인(Hash Join)


  • 두 테이블 중  작은 것(B)을 비트맵 해시 테이블을 메모리에 올린 후 큰 테이블(A)을 스캔 하면서
    메모리에 로딩된 테이블과 비교, 매칭되는 데이터를 추출하는 방식의 조인

  • 해쉬조인으로 유도하기 위해서는 USE_HASH(B A) 힌트를 사용

    SQL> select /*+ use_hash(d e) */ e.empno, e.ename, d.dname
    2 from dept1 d, emp1 e
    3 where e.deptno = d.deptno
    4 and e.deptno = 0;

  • 성능을 위해서는 작은 테이블이 메모리에 올라가는 것이 좋은데, 이 테이블을 드라이빙 테이블(driving/outer table) 이라고 한다.
    해시 테이블이 메모리에 생성되면 성능이 좋아진다.
    메모리에 생성되지 않으면 내부적으로 임시 테이블이 만들어 져야 한다.
    두 테이블의 크기 차이가 클수록 성능은 좋아진다 

#아래에서 dept 테이블이 메모리에 로드되어 emp 테이블의 내용과 비교하면서 결과를 추출 합니다. 
  
select    /*+ ORDERED USE_HASH(e) */ 
          e.empno, 
          e.ename, 
          d.dname, 
          d.loc 
from  dept d, emp e 
where  e.deptno = d.deptno 

Comments