2012-10-30 63 views
-5

我有一個相對簡單的問題。t sql union vs連接命令(效率)

我有數據集A和集B,在結構上都相同。

最終的結果將是聯合所有數據集A和集B的,我們把它叫做數據集C.

但最終版本之前,最終的數據集需要通過加入對數據集進行過濾X.

問題是我應該連接數據集X上的數據集A,連接數據集X上的數據集B,然後聯合ALL A和B,或者我應該將ALL A和B連接到C,然後將X連接到C上。

什麼是更快,更高的內存效率等?

在此先感謝!

+3

你剛剛試過並比較了SSMS中的執行時間和查詢計劃嗎? – Pondlife

+4

爲什麼您認爲在您的硬件上,您認爲哪些數據對您的查詢更有效,哪些數據比您更有效? –

+0

在這個特定的查詢中,關於這個特定服務器上這個特定數據集的效率並不高,我問的是,如果一個訂單對於大數據集來說,就sql處理代碼的方式而言是否更高效。如果沒有普遍的答案,並且在使用相似大小的數據集時比逐個案例更慢或更快,那麼sql server的編碼方式會出現問題。 – jz3

回答

1

我的直覺將兩者加入到X,則工會的結果。這樣sql server optimiser有更好的機會提供最佳的查詢計劃,但這可能是你編寫兩者的情況,檢查執行計劃和時間以真正看到差異。

5

這取決於很多事情,這是不可能的從你的問題說:索引,統計,內或外連接的數據類型。你必須知道更多,甚至你真的需要比較執行計劃。

由於我不喜歡重複自己,因爲維護原因,我可能會在聯盟之外加入聯盟,但是如果我必須打賭,我可能會打賭聯盟首先可以勝過它 - 特別是如果加入急劇減少行數。

+0

他們都是內在聯接。他們不會總是大幅減少排數。我剛剛運行了幾個測試場景,結果如下: 在每個數據集上執行連接,然後在大約26秒後平均完成所有連接。 先執行聯合,然後加入結果平均爲21.5秒。 這是〜65k行的結果。這對於這麼少的行來說似乎是一個重要的區別。 – jz3

+0

@ jz3我不得不更多地瞭解數據,代碼和執行計劃來說更多。 –

1

我真的很期待看到兩者的執行計劃,看看有什麼需要較少的時間/資源。

Here is a great starter video如何開始使用基於SQL管理局性能優化。一個真正從未得到足夠重視的話題。

監控在你的優化演進的執行計劃是一個偉大的技術,因爲它真的下來的戰壕,以顯示你是否以及如何進一步索引和其他優化技術在你執行回報。