http://cafe.naver.com/dbstudydapsqlp/2220
-- 이곳에서 문제 참조 함
내 답안)
select /*+ ordered use_nl(p4) rowid(p4) */ p4.prod_nm, p.prod_id, p3.order_qty
from ( select /*+ no_merge ordered use_hash(o) */ p2.rid, o.order_qty
from ( select /*+ ordered use_nl(p1) */ p1.m_code, p1.prod_id
from , t_manuf m, t_product p1
where p1.m_code = m.m_code
and m.m_code between 'M00001' and 'M00100' ) p2
, order_qty o
where p2.prod_id = o.prod_id
and o.order_dt = '20160412'
and o.order_qty > 9000
) p3
, t_product p4
where p3.rid = p4.rowid
;
-- 참조한 곳의 답안과 약간 다른데 난 실행계획의 hash 까지 좀 표현하려고 in-line view를 한번 더 씀
-- 그런데 처음에 답을 보지 않고 답안을 작성했을 때 no_merge 힌트를 사용하지는 않았음
이 부분은 문제의 소지가 좀 있음 view merging 은 10g 부터 비용 기반 변환이라서
힌트를 사용하지 않으면 어떻게 될지 잘 모름 그런데 만약 바깥에 in-line view가 view merging 되면
위의 쿼리는 튜닝 되지 않았을 것임
그래서 no_merge 힌트는 써주는 것이 맞았을 것 같음
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 1-2. 인덱스 기본원리 (0) | 2016.12.26 |
---|---|
성능고도화 1-1. 인덱스 구조 (0) | 2016.12.26 |
SQLP 시험문제 11일차 (0) | 2016.11.24 |
SQLP 시험 문제 7일차 (0) | 2016.11.24 |
SQLP 시험문제 6일차 (0) | 2016.11.24 |