Mysql 如何最好地重新计算分组依据值
我有一个表,它存储一个大表的求和值。我不是在计算它们,因为我经常需要它们 更新这些值的最佳方法是什么Mysql 如何最好地重新计算分组依据值,mysql,Mysql,我有一个表,它存储一个大表的求和值。我不是在计算它们,因为我经常需要它们 更新这些值的最佳方法是什么 我可以从表中删除相关行,在所有相关行上按总和进行完整分组,然后插入新数据 或者我可以在主表上索引一个timestamp列,然后只对最新的值求和,并将它们添加到现有数据中。这很复杂,因为某些总和不存在,因此需要同时运行insert和update查询 我意识到答案取决于数据的细节,但我想知道的是,第二种方法是否值得;如果在第一个示例中有数百万行被求和,而在第二个示例中只有几十行被求和,那么第二个示例
我意识到答案取决于数据的细节,但我想知道的是,第二种方法是否值得;如果在第一个示例中有数百万行被求和,而在第二个示例中只有几十行被求和,那么第二个示例的执行速度会显著加快吗?您可以尝试在更新/删除时使用触发器。然后检查插入或删除的值,并根据它修改第二个表中的和
您可以在更新/删除时尝试使用触发器。然后检查插入或删除的值,并根据它修改第二个表中的和
对我来说,有几种方法:
- 创建一个应该是最新的视图(我不知道是否可以在mysql中创建具体的视图)
- 使用触发器(例如更新/删除/插入)或在夜间使用批处理(因此数据将为1天)生成最新的表格
- 制作一个只检索和计算所需数据的存储过程
- 创建一个应该是最新的视图(我不知道是否可以在mysql中创建具体的视图)
- 使用触发器(例如更新/删除/插入)或在夜间使用批处理(因此数据将为1天)生成最新的表格
- 制作一个只检索和计算所需数据的存储过程
- 对我来说,有几种方法:
- 我会这样做():
如果你需要更多的例子,请告诉我。我会这样做():
如果您需要更多示例,请告诉我。您的案例中“大”有多大?如果少于数亿,您可以添加适当的索引和缓存机制,并从中选择count(*),而无需担心anything@keymone你确定。这将是数百万,但这个问题表明,即使这是一个问题,因为计数没有索引。触发器的问题是,如果您的表太大,它们会有很多流量。大量的流量会产生大量的触发事件。每个触发器事件都将生成对数据库的另一次写入。那么这值得吗?如果您的计数查询不是很复杂,那么您可以轻松地对列进行索引。在您的情况下,“大”有多大?如果少于数亿,您可以添加适当的索引和缓存机制,并从中选择count(*),而无需担心anything@keymone你确定。这将是数百万,但这个问题表明,即使这是一个问题,因为计数没有索引。触发器的问题是,如果您的表太大,它们会有很多流量。大量的流量会产生大量的触发事件。每个触发器事件都将生成对数据库的另一次写入。那么这值得吗?如果您的计数查询不是很复杂,那么您可以轻松地对列进行索引。感谢Robin,在重复键上对我来说是一个新选项,这当然简化了第二个选项。感谢Robin,在重复键上对我来说是一个新选项,这当然简化了第二个选项。
mysql_query("
INSERT INTO sum_table (col1, col2)
SELECT id, SUM(value)
FROM table
GROUP BY id
ON DUPLICATE KEY UPDATE col2 = VALUES(col2)
");