SUBQUERY – NOT EXISTS

2006/09/08 19:54

출처 블로그 > ▶ IT 강국 코리아
원본 http://blog.naver.com/leeyb74/130002720990

where    a.code NOT IN (select     deptno from tab2 where gcode = b.code)

위와 같이 NOT IN 의 연산자가 올 경우, SUB QUERY의 조건을 사용하여 NOT IN 대신 NOT EXISTS를 사용하여 개선할 수 있습니다.

where   a.code IS NOT NULL

and       a.code NOT IN ( select    /*+ MERGE_AJ */

                                                    deptno from tab2 where gcode = b.code

                                       and       deptno IS NOT NULL)

위와 같이 NOT IN 을 사용하는 경우 힌트를 사용하여 성능을 더욱 개선할 수 있습니다. 다음과 같이  /*+ MERGE_AJ*/ 나 혹은 /*+ HASH_AJ */ 와 같은 해당 조인시에서 양쪽 집합만을 추출하는 것에 대해 최적인 실행 계획을 수립, 실행하라는 힌트를 쓸 수 있습니다. 이 때 양쪽 집합의 조건에 NOT NULL을 주는 것은 필수 조건으로 오라클의 버그를 피하기 위한 방법입니다.