【发布时间】:2017-02-27 10:04:40
【问题描述】:
我在 JC_ItemDailySalesParent 表中有数百万条数据。当我进行分组时,它的加载时间超过 5 分钟,但还没有完成。
受影响的总行数可能是 500,000 条记录(未分组)
select pp.ItemLookupCode,
StoreID,
sum(Qty) TotalQuantity,
sum(ExtendedPrice) ExtendedPrice,
sum(ExtendedCost) ExtendedCost
into #temp_tt
FROM [HQMatajer].[dbo].[JC_ItemDailySalesParent] pp
WHERE (Time>=CONVERT(datetime,'2015-01-01 00:00:00.000',102)) and
(Time<=CONVERT(datetime,'2015-01-31 00:00:00.000',102))
group by pp.ItemLookupCode,StoreID
order by pp.ItemLookupCode
我为时间创建了索引。
【问题讨论】:
-
我认为如果您在变量中捕获截止日期,您的查询将会得到改善,因此不必对每一行都使用
convert函数。另外,如果你在另一个表中插入,你为什么要order by? -
只看执行计划。
-
@HoneyBadger 你能举个例子吗?
-
@mohamedfaisal 否决票可能是因为要解决性能问题,需要更多信息。如表属性、执行计划、硬件等。
-
最快的结果通常是通过使用覆盖索引来实现的 - 将所有其他结果列(itemlookupcode 和 storeid 作为索引的一部分,其他三列作为包含的列)添加到您的时间索引,然后 SQL 不需要完全读取其他数据。
标签: sql sql-server stored-procedures indexing