SQL Server聚合性能

11 sql sql-server math performance aggregate

我想知道如果你想在查询中使用聚合,SQL Server是否知道'缓存',如果再次使用它们.

例如,

Select Sum(Field),
       Sum(Field) / 12
From   Table
Run Code Online (Sandbox Code Playgroud)

SQL Server是否知道它已经在第一个字段上计算了Sum函数,然后将它除以第二个字段的12?或者它会再次运行Sum函数然后除以12?

谢谢

gbn*_*gbn 8

它计算一次

Select
   Sum(Price),
   Sum(Price) / 12
From
   MyTable
Run Code Online (Sandbox Code Playgroud)

该计划给出:

|--Compute Scalar(DEFINE:([Expr1004]=[Expr1003]/(12.)))
  |--Compute Scalar(DEFINE:([Expr1003]=CASE WHEN [Expr1010]=(0) THEN NULL ELSE [Expr1011] END))
     |--Stream Aggregate(DEFINE:([Expr1010]=Count(*), [Expr1011]=SUM([myDB].[dbo].[MyTable].[Price])))
        |--Index Scan(OBJECT:([myDB].[dbo].[MyTable].[IX_SomeThing]))
Run Code Online (Sandbox Code Playgroud)

该表有135万行