본문 바로가기

Programming/과거포스팅

NOT IN , NOT EXISTS 속도개선

NOT IN의 속도개선 문제입니다. 오늘 멘붕와서 하다가 다른방식으로 접근했네요..

--------


A, B 테이블이 있는데


각각 값이 250개 100개가 있는데
A테이블에서 B테이블의 데이터를 제외하고 뽑아야하는 쿼리..

보통 NOT IN 또는 NOT EXISTS를 사용하는데

이 데이터들이 키가 아니고 인덱스가 없을때 속도면에서 골치아프더군요

오늘 요놈들 NOT IN으로 뽑아보니 몇개 되지도 않는게 9.5초가 걸리네요..

그래서 집합개념으로 접근해봤습니다. 

B가 A의 부분집할일경우  // 전제조건입니다. 꼭 B가 A의 부분집합이어야 합니다.

SELECT *
(
SELECT ~~ FROM
TABLE A,
TABLE B
WHERE A.AA = B.AA(+)
)
WHERE B.AA IS NOT NULL   //아우트조인을 하면 당연히 A에 없는 B는 널이 떨어지겠죠.

이렇게 하면 0.4초안에 떨어지네요 ㅎㅎ

B가 A의부분집합이기에 가능한 쿼리구요.. 담에 이런걸로 저처럼 멘붕당하지 않길 바래서 올립니다.