다른 명령
조인시 성능 튜닝 요소
NL조인
- NL조인은 Random 액세스 발생량에 의해 성능 결정
- WHERE 조건이 없는 경우에는 드라이빙테이블(OUTER)은 작은 집합을 드라이빙하는 것이 유리.
- WHERE 조건이 있는 경우에는 WHERE 조건절 컬럼의 인덱스 존재 및 구성여부에 따라 성능이 결정되며, 작은 쪽 집합을 드라이빙하는 것이 유리.
- INNER쪽 테이블의 조인 컬럼에 인덱스 존재 여부가 성능에 결정적인 요소.
- NL조인에서는 Random 액세스 발생량 외에도 Inner 쪽 인덱스 구성 및 조건절 연산자 형태에 따라 성능이 크게 좌우되는데, 인덱스 스캔 효율에 차이가 생기기 때문.
NL조인 Prefetch
NL조인 Batching
해시 조인
- Build Input을 작은 쪽 테이블로 드라이빙하는것이 유리 (SWAP_JOIN_INPUTS 힌트로 조절)
- 해시조인은 Hash Area에 Build Input을 모두 채울 수 있느냐가 관건
소트머지 조인
- 소트머지 조인과 해시조인에서도 순서가 중요
- 소트머지 조인은 PGA상에서 정렬된 집합(Sort Area)을 통해 조인 액세스가 일어나기 때문에 Random 액세스 발생량 보다 소트 부하에 의해 성능 결정됨.
- 디스크 소트가 발생할 정도의 큰 테이블을 포함할 때는 큰 테이블을 드라이빙하는 것이 빠르지만 메모리 소트방식으로 조인할 때는 적은 쪽 테이블을 드라이빙하는 것이 조금 더 빠름
select /*+ ordered use_merge(e) */ d.deptno, d.dname, e .empno, e .ename from dept d, emp e where d.deptno = e.deptno