我有两个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行多得多。我推测这是你的情况不同的主要原因。事实上,它可能占更多的差异,因为聚合应该更慢。
聚合可以利用表上的索引,因此您的数据库可能也有优化聚合的索引。