制作一个python脚本来聚合一个表会更快吗?,还是内置SQL聚合与轮询相结合会更快



目前,我有一个小问题,需要我建立一个表来显示在受尊重的日子里产生的能量。

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

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

SQL表

日期/时间
2022年1月24日2:00 2001年
2022年1月24日4:00 2094
2022年1月24日14:00 3024
2022年1月24日17:00 4056
2022年1月25日2:00 4056
2022年1月25日4:00 4392
2022年1月25日17:00 5219

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

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`);

最新更新