2014-09-22 56 views
0

简化系统概述如何优化或简化极慢的SQL查询/函数/过程?

帐户具有一个独特的AccountID和OpeningBalance量(这是可以被理解为参考时间BOT的开始为帐户静态量);有一些交易具有CreditAmount,DebitAmount,DateStamp和通过FK_AccountID对账户的引用。

要求

对于给定的账户,什么是给定日期期限日期1到日期2的OpeningBalance?当然,如果Date1 = BOT,那么我们已经有了答案。然而,由于任何给定日期的OpeningBalance与上一个日期的ClosingBalance相等,为了计算这段时间,我们需要首先计算上一期的ClosingBalance,然后我们得到我们的答案。

解决方案/问题(S)

我写了一个解决方案(T-SQL,SQL Server 2008中)与一对夫妇为它确实工作的逻辑功能,但计算OpeningBalance的所有账户( 100+)一次性使用WHILE循环遍历每个帐户,这是不可用/可扩展的,每个帐户约为1秒。

问题

有没有办法解决这个问题没有[慢]循环?

回答

0

事实上,我很快就解决了我的问题,重构后在我的主要SELECT查询中使用了许多嵌套的CASE语句,而不是我的初始解决方案,即通过调用每个帐户行返回表的函数的调用。这并不理想,因为我不得不将大部分函数逻辑(进入SQL Server处理自身的CASE结构,因此没有可怕的循环),但它现在非常快速,但缺乏原始函数的清晰度。