如何最好地按值重新计算组

时间:2011-08-08 08:00:48

标签: mysql

我有一个表存储大表的总和值。我不是经常计算它们,因为我经常需要它们。

更新这些值的最佳方法是什么?

  1. 我可以删除表中的相关行,在所有相关行上按总和执行完整的组,然后插入新数据。

  2. 或者我可以索引主表上的时间戳列,然后只将最新值相加并将它们添加到现有数据中。这很复杂,因为一些总和将不存在,因此需要运行插入和更新查询。

  3. 我意识到答案取决于数据的细节,但我想知道的是,是否值得做第二种方法;如果在第一个例子中总计数百万行,而在第二个例子中只有几十行,那么第二行的执行速度会明显加快吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用更新/删除触发器。然后检查插入或删除的值,并根据它修改第二个表中的总和。

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

答案 1 :(得分:1)

对我来说有几种方法:

  • 创建一个应该是最新的视图(我不知道你是否可以在mysql中查看具体视图)
  • 使用触发器创建一个最新的表(在更新/删除/插入时作为示例)或使用批处理(夜间,因此数据将为1天)
  • 制作一个存储过程,该过程将仅检索和计算所需的数据。

答案 2 :(得分:1)

我会做这样的事情(INSERT UPDATE):

mysql_query("
INSERT INTO sum_table (col1, col2)
SELECT id, SUM(value)
FROM table
GROUP BY id
ON DUPLICATE KEY UPDATE col2 = VALUES(col2)
");

如果您需要更多示例,请与我们联系。