SELECT /*+ ORDERED USE_NL(B) USE_NL(C) USE_NL(D) */
*
FROM A, B, C, D
WHERE ....
SELECT /+ ORDRED USE_NL(C) INDEX(E) INDEX(C) /
e.사원번호, e.사원명, e.입사일자
,c.고객번호 , c.고객명, c.전화번호, c.최종주문금액
from 사원 e, 고객 c
where c.관리사원번호 = e.사원번호 --1
and e.입사일자 >= '19960101' -- 2
and e.부서코드 = 'Z123' -- 3
and c.최종주문금액 >= 20000 -- 4
사원pk : 사원번호
사원_x1 : 입사일자
고객_pk : 고객번호
고객_x1 : 관리사원번호
*고객_x2 : 최종주문금액
TABLE ACCESS BY INDEX ROWID OF 고객
NESTED LOOPS
TABLE ACCESS BY INDEX ROWID OF 사원
INDEX RANGE SCAN OF 사원_X1
INDEX RANGE SCAN OF 고객_X1
SELECT /+ ORDRED use_hash(C)/
e.사원번호, e.사원명, e.입사일자
,c.고객번호 , c.고객명, c.전화번호, c.최종주문금액
from 사원 e, 고객 c
where c.관리사원번호 = e.사원번호
and e.입사일자 >= '19960101'
and e.부서코드 = 'Z123'
and c.최종주문금액 >= 20000
일반적인 조인 메소드 선택 기준
소량과 대량의 기준 : 단순데이터량이 아님, NL조인 기준으로 최적화했는데도 랜덤액세스가 많아 만족할만한 성능을 낼수 없다면 대량 데이터 조인에 해당
수행 빈도가 매우 높은 쿼리에 대한 기준
(인덱스 설계부담에도 불구하고, 해시 조인이 더빠른데 불구하고 NL부터 고려해야하는 이유)
NL조인에 인덱스는 영구적으로 유지하면서 다양한 쿼리를 위해 공유 및 재사용하는 자료구조
해시테이블은 하나의 쿼리를 위해 생성하고 조인이 끝나면 바로 소멸하는 자료구조
같은 쿼리를 100개 프로세스가 동시수행하면 해시테이블도 100개가 만들어짐.
수행시간이 짧으면서 빈도가 매우높은 쿼리(OLPT성쿼리의 특징)를 해시조인으로 처리하면 CPU와 메모리사용량이 크게 증가
해시맵 만드는 과정에 여러 래치경합도 발생
해시조인적용대상 SQL (DW, OLAP성 쿼리 특징)