문제 1
위에서 가장 데이터가 많은 테이블을 드라이빙 테이블로 NL 조인하고 있다.
그리하여 Product 테이블도 2천만건이나 스캔하며 엄청난 Random 액세스를 발생시키고 결국애는 2000만건을 Distinct하여 500건을 추출한다.
이를 튜닝하여 Order테이블을 Filter나 Semi Join으로 검사하여 추출하는 방법을 사용해 보자
select c.m_code, c.m_name
from product b, manuf c,
(select /*+no_unnest index_ffs(orderdt_prod) */ a.prod_id
from order a
where a.orderdt >= 20090101
group by a.prod_id) a
where b.m_code = c.m_code
and a.prod_id = b.prod_id
group by c.m_code, c.m_name
위 튜닝 전략은 아래와 같다.
첫째. 실행순서를 작은테이블 부터 큰테이블 순으로 스캔하며 조인한다.
둘째. 해시조인으로 대용량 테이블의 조인 성능을 상승시킨다.
셋쨰. order 테이블의 인덱스 컬럼 추가로 테이블 랜덤 액세스를 방지한다.