2011-09-05 65 views
0

我必須從表中過濾掉表中的行,說A(不包含1列),不存在於表B中(包含許多列)。NOT IN子句中查詢羚牛太多時間執行

除了表A中的唯一列,我沒有其他列可以使用。

所以,我目前使用NOT IN子句,但執行時間太長。

沒有餘地加入由於單個公共列

請提出你的意見

+0

您可以嘗試在列上創建索引,以加快「NOT IN」搜索的速度 –

+1

爲什麼不能加入單個列? – dkretz

+0

你能分享一個示例查詢嗎?使用SELF JOIN可能會解決這個問題,但爲了確定這一點,您需要獲取更多信息。 –

回答

1

NOT IN(以及<>例如)不能與B樹進行優化組織索引。所以不幸的是,你不能對這個問題做任何事情。

+0

您是否試圖說,對於「NOT IN」查詢存在哪些索引並不重要,因爲這絕對不是這種情況。 –

+0

@Martin Smith:我試圖說'NOT IN'和'<>'不能用B-Tree索引進行優化,因此 - 對於查詢處理,fullscan將被執行。 – zerkms

+0

我明白你的意思,第一個輸入需要全面掃描,但索引絕對有幫助。如果SQL Server知道兩個輸入均已排序(例如)或使用索引查找第二個輸入,則可以使用合併反半連接。 –