where절에 있는 서브쿼리 결과가 1개 이상인 경우

filter 방식 / join 방식 옵티마이저 


filter 방식 - 메인 sql 데이터 만큼 서브쿼리가 돈다.

즉, 메인 sql 100만건 돈다면 일일이 서브쿼리에게 100만건 input 한다

(서브 쿼리의 결과가 1개라고 한다면 성능저하 되지는 않지만 그런 경우는 거의 없으므로

성능이 안좋은 쿼리라고 할 수 있다)


join 방식 - 메인 sql 양이 많고 서브 sql 의 양이 적을때

선 서브 sql 선 scan 하여 join 할수 있다.


하지만 nested loops join 이외 다른 join은 filter 방식에 대한 효과를 얻지 못한다.

(join 하고자하는 input 값이 적을땐 join 방식보다 filter 방식이 더 성능상 이점을 가질

수 있다)


스칼라 서브쿼리를 사용할 때 결과 추출값이 많을 때는

서브쿼리에서 조인으로 변경한 후 hash join 유도 하는게 좋다 (no index scan)


결과 추출값이 적을 때는 조인에서 부분 범위처리 (rownum >=10)를 선행 후

스칼라 서브쿼리로 바꾸는것이 I/O 처리량을 줄일 수 있다


관련 내용은 여기에 자세히 

http://oracle10g.tistory.com/871



+ Recent posts