select 有聚合和没有聚合在速度上有什么不同?

What is different between select with aggregate and without it in speed?

我有两个 SQL 查询。

第一次查询:

CHECKPOINT
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
SELECT dateadd(HH, datediff(HH, 0, time_Stamp), 0) as Time1
      ,[Field1]
      ,[Field2]
      ,[Field3]
      ,[Field4]
      ,[Field5]
      ,[Field6]
      ,[Field7]
FROM [dbo].[TableT001]

和第二个查询:

CHECKPOINT
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
Select dateadd(HH, datediff(HH, 0, time_Stamp), 0) as Time1
,Min(cast(Field1 as bigint)) 
,Min(cast(Field2 as bigint)) 
,CAST(Avg(Field3) as float) 
,CAST(Avg(Field4) as float) 
,CAST(Avg(Field5) as float) 
,CAST(Avg(Field6) as float) 
,CAST(Avg(Field7) as float) 
from TableT001 
Group by dateadd(HH, datediff(HH, 0, time_Stamp), 0)  
order by Time1 

第一个查询在 30 秒内执行,第二个在 2 秒内执行!

虽然两个查询从TableT001读取相同的数据(大约1450000行),速度差异的原因是什么?

编辑:

通常情况下,聚合比不聚合要慢得多。但是,将最终结果集移出数据库也需要时间。

返回 1,450,000 行所花费的时间显然比返回 24 行要多得多。我推测这可以解释您的情况的大部分差异。事实上,它可能解释了 更多 的差异,因为聚合应该更慢。

聚合可以利用表上的索引,因此您的数据库可能也有优化聚合的索引。