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



我有两个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行)时,速度差异的原因是什么?

编辑:

  • 第一个查询执行计划:

    第一个查询执行计划

  • 第二个查询执行计划:

    第二个查询执行计划

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

返回1450,000行所花费的时间显然要比返回24行多得多。我推测这是你的情况不同的主要原因。事实上,它可能占更多的差异,因为聚合应该更慢。

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

相关内容

  • 没有找到相关文章

最新更新