如果在同一个查询中使用同一个 ROUND and/or SUM 执行多少次
How many times does the same ROUND and/or SUM execute if used in the same query
DB - SQL 服务器 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
----
答案取决于执行计划。在这种情况下,我希望 round()
对结果集中的每一行执行 7 次。但是,通常在聚合查询中,结果集比初始数据小得多,因此这可能会增加查询的开销。
sum()
则另当别论。执行多少次并不重要。操作的昂贵部分是聚合,通常比单个聚合函数要多得多。
我不确定 SQL 服务器是否优化了多个 sum()
,但我怀疑它对性能有多大影响。
唯一可以确定的方法是将计算字段 ROUND(SUM(account.basevalue + account.accuredInteres), 2) 作为普通字段,然后在外部 sql select 但这并不是对所有情况都更好的方法,可能不适合您的完整陈述。但是,您可以在大型数据集上尝试它以查看计划和执行时间。我相信额外的费用会很少。
DB - SQL 服务器 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
----
答案取决于执行计划。在这种情况下,我希望 round()
对结果集中的每一行执行 7 次。但是,通常在聚合查询中,结果集比初始数据小得多,因此这可能会增加查询的开销。
sum()
则另当别论。执行多少次并不重要。操作的昂贵部分是聚合,通常比单个聚合函数要多得多。
我不确定 SQL 服务器是否优化了多个 sum()
,但我怀疑它对性能有多大影响。
唯一可以确定的方法是将计算字段 ROUND(SUM(account.basevalue + account.accuredInteres), 2) 作为普通字段,然后在外部 sql select 但这并不是对所有情况都更好的方法,可能不适合您的完整陈述。但是,您可以在大型数据集上尝试它以查看计划和执行时间。我相信额外的费用会很少。