我在網上看了,但一直無法找到這方面的信息訪問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
我在網上看了,但一直無法找到這方面的信息訪問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)。第二個不能爲零。
在任何情況下,性能的差異都會很小。對於每行計算IFF()
,可能會有很小的開銷,但是執行聚合的努力應該會消耗這些資源。而且,在第二種情況下,計算兩次SUM()
的開銷很小。
更重要的問題是讓邏輯正確。此外,第一等同於:
SELECT SUM([Field]) as sumField
FROM tbl;
爲了得到一個明確的答案,你需要找到一些文檔,說明不論這是否sum
將在您的第二個腳本中執行兩次或不執行。
如果不這樣做,您可以簡單地採取安全行動,這是您的第一個查詢,將保證sum
只計算一次。
第二種情況不會有2調用任何開銷,如訪問緩存功能結果,如果指定了相同的輸入參數返回相同的結果(這就是爲什麼虛擬輸入有時使用變量)。 –
謝謝你,你已經幫助我正確理解邏輯。我實際上是這樣做的,因爲我的實際查詢通過上面的結果劃分了另一個值,我試圖避免div/0錯誤(不必單獨檢查除數),我將與第二個一起去,所以它永遠不會是零 – Leroy