-1

我有一个系统,可以让用户输入金融交易,包括美元金额。一旦交易被添加\更新或从系统中删除,帐户总额必须重新计算并立即显示给用户。用户可以访问系统中的某些帐户,但不是全部。一个帐户的所有交易金额总和的有效计算方法

下面是持有帐户和交易数据的表格的屏幕截图的链接。

http://i.imgur.com/EqV7w.png

目前,以获得该帐户总我用下面的查询:

select sum(t.Amount) 
from [Transaction] t 
join [Account] a on a.AccountId=t.AccountId 
where [email protected] 

我对ACCOUNTID事务表中的非唯一的非聚集索引和金额列允许该查询通过AccountId快速查找交易。

它做我想要的,但我担心的是,交易表增长非常快,目前我有大约100万条记录,随着时间的推移,我预计它会达到数千万。此外,可以积极编辑交易的用户数量也在增长,我在系统中拥有大约5500个用户。

我正在研究一个解决方案来限制使用交易表时获得该帐户的总$,以便系统可以扩展。我有2个解决方案:

  1. 通过要求用户点击某个按钮时需要该信息来计算帐户总数。我可能会走这条路线,但我仍想通过实时更新账户总量来探索我的选择。
  2. 将运行总额存储在其他地方并用它来计算帐户总额。有一个限制与它相关联,因为所有事情都必须通过一个可以了解所有这些细微差别的单一界面来完成。编辑数据库中的交易记录会很棘手,因为您必须确保运行总额也已更新。

我在寻找其他替代方法来实时计算账户总额,而不用担心数据库性能。

+0

墙上的文字!!!!请格式化一些!数据库模式也很好,你尝试过一些SQL! –

+0

对不起,这是我的第一篇文章。我已经更新了它,使一些视觉效果更加干净。 – Art

回答

0

我的建议是使用最后的解决方案只有当你有性能问题
处理大量数据是数据库的工作,所以如果您的数据结构正确,即使有成千上万行,SQL查询也可以执行得很好。
所以,先试着继续下去。如果遇到性能问题,请尝试找到解决方案。

如果您决定使用保留计算总计字段的解决方案来解决更新数据而不更新为总计字段的风险,则应该使用触发器:每次添加,删除或更新行时,您应该增加或减少Total值。

Here's some help on how to create triggers.

0

即使表很大上的accountId索引将削减查询中涉及到相对小的数量的行以有效的方式的行数。

如果您有很多这种类型的查询,并且可以使用比实际事务更新的摘要,那么您可以考虑设置一个单独的数据库用于报告,您可以在那里进行反规范化,构建摘要等。然后,您可以创建定期更新这些表格的作业(这是"data warehouse"背后的基本思路 - 您可能不需要全面的版本,但适用相同的想法)。