【发布时间】:2011-10-22 04:38:38
【问题描述】:
我有一个存储大型表的总和值的表。我不会即时计算它们,因为我经常需要它们。
更新这些值的最佳方法是什么?
我可以从表中删除相关行,在所有相关行上按总和进行完整分组,然后插入新数据。
或者我可以在主表上索引一个时间戳列,然后只对最新值求和并将它们添加到现有数据中。这很复杂,因为某些总和不存在,因此插入和更新查询都需要运行。
我知道答案取决于数据的细节,但我想知道的是是否值得采用第二种方法;如果在第一个示例中汇总了数百万行,而在第二个示例中只有数十行,那么第二个示例的执行速度会显着加快吗?
【问题讨论】:
-
在您的情况下“大”有多大?如果少于数亿,您可以添加适当的索引和缓存机制并执行 select count(*) from 而无需担心任何事情
-
@keymone 你确定。这将是数百万,但这个问题表明即使这是一个问题,因为计数没有被索引。 stackoverflow.com/questions/1332624/…
-
触发器的问题是,如果您的表非常大 - 它们的流量很大。并且大量的流量会产生大量的触发事件。并且每个触发事件都会生成另一个对数据库的写入。所以值得吗?如果您的计数查询不是很复杂,那么您只需索引列即可轻松摆脱。
标签: mysql