使用SQL更新为SUM 0值还是排除它们?

psy*_*ann 1 sql t-sql

我想要SUM很多行.

选项A或选项B更快(或更好的做法等)?

选项A.

SELECT
    [Person]
    SUM([Value]) AS Total
FROM
    Database
WHERE
    [Value] > 0
GROUP BY
    [Person]
Run Code Online (Sandbox Code Playgroud)

选项B.

SELECT
    [Person]
    SUM([Value]) AS Total
FROM
    Database
GROUP BY
    [Person]
Run Code Online (Sandbox Code Playgroud)

如果我有,对于人X:

0, 7, 0, 6, 0, 5, 0, 0, 0, 4, 0, 9, 0, 0
Run Code Online (Sandbox Code Playgroud)

选项A做:

a) Remove zeros
b) 7 + 6 + 5 + 4 + 9
Run Code Online (Sandbox Code Playgroud)

选项B确实:

a) 0 + 7 + 0 + 6 + 0 + 5 + 0 + 0 + 0 + 4 + 0 + 9 + 0 + 0
Run Code Online (Sandbox Code Playgroud)

选项A的求和较少,因为它总和的记录较少,因为我已经排除了零值的负载.但是选项B不需要WHERE子句.

任何人都知道这些中的任何一个是否比另一个明显更快/更好?或者它只是一种无关紧要的东西?

谢谢 :-)

Mar*_*ell 6

好吧,如果你有一个与该where子句完全匹配的过滤索引,并且如果该索引删除了大量数据(如:一大块数据为零),那么绝对是第一个......如果你不这样做有这样一个索引:然后你需要根据你的具体数据进行测试,但我可能希望未经过滤的场景更快,因为它可以使用一系列技巧来做总和,如果它不需要分支等

然而,这两个例子目前在功能上并不相同(第二个包括负值,第一个不包括).