SUM 相同列的两倍性能

Daw*_*wan 5 performance sql-server sql-server-2012 query-performance

数据库管理系统:SQL Server 2012 Express

我有一个看起来像这样的 SQL 语句:

SELECT

    OverSpeedings = SUM(OverSpeeding),
    OverspeedingPoints = SUM(OverSpeeding) * 5,


FROM
    MyTable

GROUP BY    
        COLUMNS_HERE
Run Code Online (Sandbox Code Playgroud)

我想知道两次添加同一列是否会影响性能?意思是 SQL Server 两次添加列吗?或者它会添加一次列并用于结果集中的两列?

或者我应该使用具有SUM以下内容的 CTE :

SELECT

    OverSpeedings,
    OverspeedingPoints = OverSpeedings * 5,

FROM
    (
    SELECT

        OverSpeedings = SUM(OverSpeeding)

    FROM
        MyTable

    GROUP BY    
        COLUMNS_HERE    
    ) A
Run Code Online (Sandbox Code Playgroud)

The*_*war 6

想知道两次添加同一列是否会影响性能?意思是 SQL Server 两次添加列吗?或者它会添加一次列并用于结果集中的两列?

总和将计算一次,结果用于引用相同的多列 sum

下面是来自我的实例的示例设置,这将证明相同

select 
sum(empid) as empidsum,
sum(empid)*2 as empidsum,
sum(empid)*4 as empid4
 from orders
Run Code Online (Sandbox Code Playgroud)

执行计划:
在此处输入图片说明

在上面的执行计划中,突出显示的计算标量如下所示

Scalar Operator([Expr1003]*(2))  
Scalar Operator([Expr1003]*(4))  
Run Code Online (Sandbox Code Playgroud)

Expr1003先前计算标量计算的总和在哪里

我应该使用带有一个 SUM 的 CTE,如下所示

CTE 只是为了可读性,使用 CTE 对性能没有帮助。

在某些情况下,实现 CTE 将有助于改进查询。有关更多详细信息,请查看此答案:

哪个性能更好,CTE 或临时表?