2011-12-28 11 views
0

これはおそらく本当に簡単なので、私は少し愚かなこれを求めて感じる。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で私のアップサートの一部である同上ので句が再び(私はマージを使用するために使用されるが、このDBでの使用不可)TBL2を実行する必要があります。ここでの問題は、tbl2が何百万行もあり、tbl1が何万ということです。明らかにtb1xtbl2 itdのようにこれを実行するのは非常に非効率的です。私はカーソルと一時テーブルを使用すると思ったが、私はそれがはるかに良い実行を見ていない?

誰もが他のアイデアを持っていますか?

答えて

1

このタイプのクエリを定義する方法はいくつかあります。

Left Join、Not In、Not Existsを使用してクエリを作成し、実行計画を確認してください。次に、どちらがあなたのケースに適しているかわかります。

LEFT OUTERは道

に参加し
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は内部結合が必要だと思います –

関連する問題