我一直對依賴子查詢的某些查詢存在奇怪的問題。他們運行得很快,直到我在子查詢中使用UNION語句。然後他們無休止地跑,我在10分鐘後給了。我現在描述的場景不是我開始使用的那個場景,但我認爲它解決了很多可能的問題,但卻產生了同樣的問題。所以即使這是一個毫無意義的查詢,請忍受我!使用UNION子查詢進行查詢需要很長時間
我有一個表:
tblUser - 100,000 rows
tblFavourites - 200,000 rows
如果我執行:
SELECT COUNT(*)
FROM tblFavourites
WHERE userID NOT IN (SELECT uid FROM tblUser);
...那麼它運行在第二下。不過,如果我修改它,這樣子查詢有UNION,它將至少運行10分鐘(之前我放棄了!)
SELECT COUNT(*)
FROM tblFavourites
WHERE userID NOT IN (SELECT uid FROM tblUser UNION SELECT uid FROM tblUser);
一個毫無意義的變化,但它應該產生相同的結果,我不明白爲什麼它需要更長的時間?
將子查詢放入視圖中並調用它,具有相同的效果。
任何想法,爲什麼會這樣?我正在使用SQL Azure。
問題解決了。請參閱下面的答案。
因爲查詢會消除重複的結果,所以'UNION'將花費相當長的一段時間。它本質上是對結果集做一個DISTINCT。執行「UNION ALL」會得到更快的結果,但是如果存在重複項,它們將不會從結果集中消除。 –
感謝您的快速響應。我將它改成了UNION ALL,並且在5分鐘後仍然運行。但是,我將數據庫下載到本地SQL Server 2008,問題消失了。 UNION的查詢幾乎和沒有查詢一樣快。然後,我在單獨的SQL Azure數據庫上運行查詢,並遇到同樣的問題。所以它看起來像一個SQL Azure問題。我會聯繫Azure支持。謝謝! –
每當聯盟給我的問題,通常是因爲它阻止自己。嘗試做兩個插入到表變量,然後在你的地方使用。 – cadrell0