2011-12-28 2 views
0

아마도 조금 어리석은 느낌이 들었습니다. 이드 절 다시 (I 병합하지만,이 DB에서의 사용할 수 없습니다를 사용하는 데 사용)을 TBL2를 실행해야하므로T-SQL 효율성 (상대적으로 기본)

Select DISTINCT ID from tbl1 
    where col2='abc' 
      ... 
    and ID not in (select distinct tbl2.ID from tbl2 where tbl2.Dtm > '2010-01-01') 

이것은 TSQL 내 upsert의 일부입니다. 여기서 문제는 tbl2가 수백만 개의 행을 가지고 있고 tbl1이 수만 개가 있다는 것입니다. tb1xtbl2 itd와 같이 실행하는 것은 분명히 비효율적입니다. 필자는 커서와 임시 테이블을 사용하는 것을 생각했지만 실행이 훨씬 나아진 것을 보지 못했습니까?

누구나 다른 아이디어가 있습니까?

답변

1

이 쿼리 유형을 정의하는 데는 여러 가지 방법이 있습니다.

왼쪽 결합, 없음 및 존재하지 않음으로 쿼리를 작성하고 실행 계획을 확인하십시오. 그러면 어느 것이 더 적합한 지 알 수 있습니다.

왼쪽 외부는 방법

에 참여
Select Distinct ID 
FROM tbl1 t1 
LEFT OUTER JOIN tbl2 on t1.ID = t2.ID and t2.DTM > '2010-01-01' 
WHERE 
t1.Col2 = 'abc' 
AND t2.ID IS NULL 

참조 :

Similar Discussion Thread

+0

예 아 물론 감사합니다! 그리고이 경우에는 ID가 내부 조인이 필요하다고 생각합니다. –