2017-06-15 277 views
0

我在網上看了,但一直無法找到這方面的信息訪問SQL - SUM(IIF ... VS IIF(SUM ...性能蘊涵

我只是想知道這下面的SQL查詢會執行最迅速的在MS Access大型數據集:

SELECT SUM(IIF([Field] = 0, null, [Field])) AS SumField 
FROM tbl1 

SELECT IIF(SUM([Field]) = 0, null, Sum([Field])) AS SumField 
FROM tbl1 

回答

1

兩者做不同的事情。第一個添加的數字不是零。結果可以是零(例如,如果值是-1​​和1)。第二個不能爲零。

在任何情況下,性能的差異都會很小。對於每行計算IFF(),可能會有很小的開銷,但是執行聚合的努力應該會消耗這些資源。而且,在第二種情況下,計算兩次SUM()的開銷很小。

更重要的問題是讓邏輯正確。此外,第一等同於:

SELECT SUM([Field]) as sumField 
FROM tbl; 
+0

第二種情況不會有2調用任何開銷,如訪問緩存功能結果,如果指定了相同的輸入參數返回相同的結果(這就是爲什麼虛擬輸入有時使用變量)。 –

+0

謝謝你,你已經幫助我正確理解邏輯。我實際上是這樣做的,因爲我的實際查詢通過上面的結果劃分了另一個值,我試圖避免div/0錯誤(不必單獨檢查除數),我將與第二個一起去,所以它永遠不會是零 – Leroy

1

爲了得到一個明確的答案,你需要找到一些文檔,說明不論這是否sum將在您的第二個腳本中執行兩次或不執行。

如果不這樣做,您可以簡單地採取安全行動,這是您的第一個查詢,將保證sum只計算一次。