A, B 테이블이 있다고 하겠습니다. B테이블은 리모트의 이기종 데이터베이스의 테이블입니다
select ..... from A, B
where A.key = B.key
일경우는 A의 데이터를 읽고 B쪽으로 NL로 풀려서 빠르게 데이터가 보여집니다. 그러나
select ..... from A, B
where A.key = B.key
and B.data = 'cond' ------------ <>
로 B쪽 리모트 쪽으로 체크조건이 한가지 들어갈 경우 많이 느려지는 환경입니다. 즉, 결국에는
A와 B가 먼저 조인된 결과를 먼저 도출해내고 <>의 조건을 마지막 체크조건으로 해야 가장 최선으로
보여집니다. 실제로 그렇게 풀렸으면 좋겠지만 query_rewrite가 되면서 <> 조건이 B쪽 테이블로
삽입되어 A와 B(<>조건의 결과)가 조인되어 많은 B를 가져오기 위하여 쿼리 성능이
확 줄어들고 있습니다. 힌트를 줘가면서 해봤는데 죽어라고 B를 가져올 때, <> 조건을 타더군요
with TT as ( select ... from A, B where A.key = B.key)
select * from TT where data = 'cond'
라고 해도 같더군요. 어떻게 해결하면 좋을까요? 특정 inline view에 실행계획을 고정시키는 방법이
있을까요? |