首页 > 解决方案 > 如果在同一个查询中使用相同的 ROUND 和/或 SUM 执行多少次

问题描述

数据库 - SQL Server 201x

下面的代码部分是从测试工具中提取的更改

我的问题是:执行相同ROUND(SUM(...)) 部分的运行时有多聪明

它是执行第一次事件并将结果用于后续事件还是多次执行。

在 SQL Server 中是否有更智能的方法来执行此操作

select
    person.Name 'Name',
    account.AccountCode 'Account Code',
    ROUND(SUM(account.basevalue + account.accuredInteres), 2)    'Account Total'
    case 
        when ROUND(SUM(account.basevalue + account.accuredInteres), 2) =  ROUND(CAST(audit_data.total as decimal(21,6)), 2) then 'MATCH'
        when 
            ROUND(SUM(account.basevalue + account.accuredInteres), 2)  <= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 1.01 AND
            ROUND(SUM(faccount.basevalue + account.accuredInteres), 2)  >= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 0.99
            then 'IN TOLERENCE'
        else 'NOT MATCHING' END 'Values Equal ?'
from
    ----
    ----
where 
    ----

标签: sqlsql-serversql-execution-plan

解决方案


答案取决于执行计划。在这种情况下,我希望round()对结果集中的每一行执行 7 次。但是,通常在聚合查询中,结果集远小于初始数据,因此这可能不会增加查询的开销。

sum()另一回事。执行多少次并不重要。操作的昂贵部分是聚合,通常比单个聚合函数更重要。

我不确定 SQL Server 是否优化了多个sum()s 但我怀疑它对性能有很大影响。


推荐阅读