SQL求和与运行总计

时间:2014-07-01 23:34:38

标签: sql database-design

我目前与我的同事在数据库的最佳设计方面存在分歧。

我们需要经常从我们的交易数据库中访问总用户余额,我们可能需要每秒多次访问此信息。

他说sql很快,我们需要做的只是SUM()交易。另一方面,我认为最终有足够的用户和大型数据库,我们的服务器将花费大部分时间在数据库中汇总相同的记录。我的解决方案是有一个单独的表来记录总数。

我们哪一个是对的?

2 个答案:

答案 0 :(得分:1)

这是数据库非规范化的一个例子。它使代码更复杂并且引入了不一致的可能性,但查询会更快。如果这是值得的,取决于性能提升的需要。

如果可以正确索引,总和也可以非常快(即快速足够)。

第三种方法是使用定期重新计算的缓存聚合。如果您不需要实时数据(例如直到昨天的帐户活动,您可以使用来自当前较小数据集的实时数据进行扩充),效果最佳。

同样,权衡是在快速制作事物和保持简单之间(不要忘记复杂性也会导致错误并增加维护成本)。对于所有情况而言,这不是一种“正确”的方法。

答案 1 :(得分:0)

我不认为一种解决方案适合所有人。

您可以使用一组良好的索引和编写良好的查询。我会先查询实时,直到你不能,然后跳转到下一个解决方案。

从那里,你可以去存储所有非变化数据的聚合(例如,从上个月开始到上个月),只查询本月发生变化的数据的总和。

您可以保存聚合表,但要保存多少种不同类型的聚合?在某些时候,你必须研究某种多维结构。