如何优化或简化极慢的SQL查询/功能/过程?

时间:2014-09-22 12:36:19

标签: sql-server

简化的系统概述

帐户具有唯一的AccountID和OpeningBalance金额(这是一个静态金额,可以理解为参考帐户的BOT开始时间);有些事务具有CreditAmount,DebitAmount,DateStamp和FK_AccountID对帐户的引用。

要求

对于给定的帐户,给定日期时间Date1到Date2的OpeningBalance是什么?当然,如果Date1 = BOT,那么我们已经有了答案。但是,由于任何给定日期的OpeningBalance等于前一个日期的ClosingBalance,为了计算这个时期,我们需要先计算前一个时期的ClosingBalance,然后我们得到答案。 / p>

解决方案/问题

我已经编写了一个解决方案(T-SQL,SQL Server 2008),其中包含一些功能可用的逻辑功能,但是一次性计算所有帐户(100+)的OpeningBalance在每个帐户上使用WHILE循环不可用/可扩展,每个帐户大约需要1秒。

问题

有没有办法在没有[慢]循环的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

实际上,我通过重构在我的主SELECT查询中使用许多嵌套的CASE语句而不是我最初的解决方案来加入对函数的初始解决方案来解决我的问题,该函数循环遍历每个Account行以返回表。它当然不太理想我必须引入大部分功能逻辑(进入SQL Server处理自己的CASE结构,因此没有可怕的循环)但现在它很快,但缺乏原始功能的清晰度。

相关问题