【发布时间】:2012-05-28 21:46:18
【问题描述】:
我检查过类似的问题,但没有一个对我有用。最有用的是http://forums.asp.net/t/1170815.aspx/1,但性能让我的查询运行了好几个小时。
我有 150 万条记录,基于 4 年的产品销售(大约 1 万件产品)。我想要一个包含日期、产品和滚动十二个月销售额的表格。
这个查询(来自上面的链接)有效,并显示了我想要的,但性能使它毫无用处:
select day_key, product_key, price, (select sum(price) as R12 from #ORDER_TURNOVER as tb1 where tb1.day_key <= a.day_key and tb1.day_key > dateadd(mm, -12, a.day_key) and tb1.product_key = a.product_key) as RSum into #hejsan
from #ORDER_TURNOVER as a
我为所有记录尝试了滚动求和游标功能,速度快如闪电,但我无法获得仅对过去 365 天的销售额求和的查询。
非常感谢有关如何解决此问题的任何想法。 谢谢。
【问题讨论】:
-
您使用的是什么版本的 SQL Server?从外观上看,您可以从使用 SQL Server 2012
sum() over(order by ...)中受益。 -
我们使用 2005 年并将继续使用它至少一年以上。不过感谢您的提示!
-
您正在使用临时表。请告诉我,您在该临时表上的 (product_key, day_key) 上有一个索引?
-
你不能把一天的总和,存储起来,收集最近的365总和吗?或者:生成年总和,每天减去今天的日总和-365,再加上今天的日总和?将其和每日总和存储起来,以便您只需要重新计算今天的总和。
-
Dems:我当然有索引。使用索引每个产品大约需要 30 秒,而不需要大约 2 分钟。
标签: sql-server performance tsql sql-server-2005