我必須根據表上不存在的條件選擇一些行。如果我使用如下所示的聯合,它會在不到1秒的時間內執行。在SQL Server查詢中,UNION ALL與OR條件
SELECT 1 FROM dummyTable
WHERE NOT EXISTS
(
SELECT 1 FROM TABLE t
WHERE Data1 = t.Col1 AND Data2=t.Col2
UNION ALL
SELECT 1 FROM TABLE t
WHERE Data1 = t.Col2 AND Data2=t.Col1
)
但是,如果我使用OR條件,由於SQL服務器正在執行表懶惰池,因此需要將近一分鐘。有人可以解釋嗎?
SELECT 1 FROM dummyTable
WHERE NOT EXISTS
(
SELECT 1 FROM TABLE t
WHERE ((Data1 = t.Col1 AND Data2=t.Col2) OR (Data1 = t.Col2 AND Data2=t.Col1))
)
表中有800k行。我喜歡你提供的選項。目前我使用的是union,但我也可以使用AND NOT EXISTS選項。我主要想知道爲什麼「或」會有問題。我想它沒有使用任何索引,並且需要將值存儲在臨時表中以供比較。 – 2011-04-13 15:28:17
我不指望我的'AND NOT EXISTS'解決方案比'UNION'更好。 (順便說一句,你爲什麼使用'UNION ALL'而不是'UNION'? – 2011-04-13 15:40:16
我認爲union沒有進行任何分組/過濾,所以速度更快,所以我會相互排斥可以做所有的工會,是的,我不認爲和不存在會比聯盟所有表現更好,只是讀得更好 – 2011-04-13 19:14:29