Mysql 如何最好地重新计算分组依据值

Mysql 如何最好地重新计算分组依据值,mysql,Mysql,我有一个表,它存储一个大表的求和值。我不是在计算它们,因为我经常需要它们 更新这些值的最佳方法是什么 我可以从表中删除相关行,在所有相关行上按总和进行完整分组,然后插入新数据 或者我可以在主表上索引一个timestamp列,然后只对最新的值求和,并将它们添加到现有数据中。这很复杂,因为某些总和不存在,因此需要同时运行insert和update查询 我意识到答案取决于数据的细节,但我想知道的是,第二种方法是否值得;如果在第一个示例中有数百万行被求和,而在第二个示例中只有几十行被求和,那么第二个示例

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

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

  • 我可以从表中删除相关行,在所有相关行上按总和进行完整分组,然后插入新数据

  • 或者我可以在主表上索引一个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)
            ");