【发布时间】:2012-12-08 17:08:18
【问题描述】:
我需要一种更快的方法来计算和显示运行总和。
这是一个 MVC telerik 网格,它查询一个使用子查询生成运行总和的视图。查询需要 73 秒才能完成,这是不可接受的。 (每次用户点击“刷新预测表”,重新填充网格需要 73 秒。)
查询如下所示:
SELECT outside.EffectiveDate
[omitted for clarity]
,(
SELECT SUM(b.Amount)
FROM vCI_UNIONALL inside
WHERE inside.EffectiveDate <= outside.EffectiveDate
) AS RunningBalance
[omitted for clarity]
FROM vCI_UNIONALL outside
某些项目上的“EffectiveDate”可以一直更改......可以添加新项目等。我当然需要一些可以即时计算运行总和的东西(当点击刷新按钮时)。存储过程或其他视图...?请指教。
解决方案:(众多之一,这个比子查询快几个数量级)
创建一个包含视图中所有列的新表除了RunningTotal col。创建一个存储过程,首先截断表,然后使用 SELECT 的所有列截断表 INSERT INTO,不使用运行总和列。
使用更新局部变量方法:
DECLARE @Amount DECIMAL(18,4)
SET @Amount = 0
UPDATE TABLE_YOU_JUST_CREATED SET RunningTotal = @Amount, @Amount = @Amount + ISNULL(Amount,0)
创建一个每天运行一次存储过程的任务代理。为您的所有报告使用TABLE_YOU_JUST_CREATED。
【问题讨论】:
标签: sql-server asp.net-mvc linq sql-server-2008 tsql