【问题标题】:Would it be faster to make a python script to aggregate a table?, or would a built in SQL aggregate combined with polling be faster?制作 python 脚本来聚合表会更快吗?还是内置 SQL 聚合结合轮询会更快?
【发布时间】:2022-01-31 02:36:44
【问题描述】:

目前,我有一个小问题,希望我建立一个表格来显示受尊敬的日子产生的能量。

我已经解决了这个问题,使用 python 和 SQL 数据轮询结合 for 循环来查看一天开始到一天结束时产生的能量,两者之间的差异将导致产生的总能量对于特定的日子。但不幸的是,由于来自 SQL 数据库的数据量很大,python 函数太慢了。

我想知道这是否可以集成到 SQL 查询中,以便在完成聚合后只吐出一个表。为了更好地理解表格,我在下面展示了一个示例。

SQL 表

date/time value
24/01/2022 2:00 2001
24/01/2022 4:00 2094
24/01/2022 14:00 3024
24/01/2022 17:00 4056
25/01/2022 2:00 4056
25/01/2022 4:00 4392
25/01/2022 17:00 5219

决赛桌 由上表可知,2022 年 1 月 24 日产生的能量为 4056(max)-2001(min)= 2055

date value
24/01/2022 2055
25/01/2022 1163

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    通常,通过网络发送更多内容所花费的时间会使应用解决方案变慢。

    GROUP BY 可能需要额外的排序,或者如果数据以这种方式排序,它可能是“免费的”。 (好吧,你说的是未索引。)

    向我们展示查询和SHOW CREATE TABLE;我们可以帮助建立索引。

    一般来说,如果工作是在 SQL 中完成的,那么用户的编码就会少得多。

    MySQL,尤其是在

    案例1:对数据O(N*log N)进行排序,然后对数据进行线性遍历;这可能会或可能不会涉及会增加开销的 I/O

    案例 2:在 RAM 中建立一个查找表以收集分组信息,然后对数据进行线性传递(不需要索引);但是你需要像O(N*log n) 这样的东西来计算/求和/无论分组值。

    注意事项:

    • 我使用N 表示表中的行数,n 表示输出中的行数。
    • 我不知道会导致优化器选择一种方法而不是另一种方法的条件。

    如果您将所有数据拖入客户端,您可能会选择其中一种算法。如果你碰巧知道你正在对一个简单的整数进行分组,那么查找(对于第二种算法)可能是一个简单的数组查找——O(N)。但是,正如我所说,网络成本可能会影响性能。

    写起来很简单就是SQL:

    SELECT DATE(`date`)  AS "day",
           MAX(value) - MIN(value) AS range
        FROM tbl
        GROUP BY DATE(`date`);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2012-12-04
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多