2016-06-25 45 views
0

我有一個查詢,看起來像這樣後:現在SQL性能 - 與過濾查詢之前或工會

SELECT PersonId, 
     Note, 
     Amount 
FROM Table1 A 
WHERE A.PersonId = @PersonId 

UNION 

SELECT PersonId, 
     Note, 
     Amount 
FROM Table2 B 
WHERE B.PersonId = @PersonId 

UNION 

SELECT PersonId, 
     Note, 
     Amount 
FROM Table3 C 
WHERE C.PersonId = @PersonId 

,該查詢最終會返回成千上萬的結果,所以我想打造最好的執行查詢的可能。我想知道這是不是工會像這樣的濾波後的PERSONID更高效:

SELECT * FROM 
(
SELECT PersonId, 
     Note, 
     Amount 
FROM Table1 A 

UNION 

SELECT PersonId, 
     Note, 
     Amount 
FROM Table2 B 

UNION 

SELECT PersonId, 
     Note, 
     Amount 
FROM Table3 C 
) A 
WHERE A.PersonId = @PersonId 

回答

0

首先,在你將有一個查詢優化器。
速度沒有差別,因爲PersonId位於顯示圖層上。
查詢優化器將更改顯示參數的執行順序,以便有最少量的參數。
所以兩個查詢的速度都是相等的。
如果你有興趣,你可以在你的SQL開發人員看到這個執行計劃。

+0

與連接相同嗎?加入每個查詢而不是結束? – Walker

+0

在你的sql開發者中自己試試。比較兩者,你會得到你的結果。據我認爲,加入可能會更快。我認爲查詢優化器會將聯合查詢重建爲聯接查詢。所以加入會更快。但是你爲什麼PersonID不是主鍵? – thirstyAndreas