2011-12-28 69 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 UPSERT的一部分,因此標識需要運行where子句再次(我用的合併,但它在這個DB不可用)的TBL2。這裏的問題是tbl2有數百萬行,而tbl1有數以萬計。很明顯,像tb1xtbl2這樣運行起來效率極低。我想過使用遊標和臨時表,但我沒有看到運行得更好?

任何人有其他的想法?

回答

1

有幾種不同的方式來定義這種類型的查詢。

請用Left Join,Not In和Not Exists創建查詢並檢查執行計劃,只有這樣你纔會知道哪一個更適合你的情況。

左外連接方式

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需要一個內部連接 –