通常,通过网络发送更多内容所花费的时间会使应用程序解决方案的速度变慢。
这个
GROUP BY
可能需要额外排序,或者如果数据以这种方式排序,则可能是“免费的”。(好的,你说没有索引。)
向我们展示查询和
SHOW CREATE TABLE
; 我们可以帮助建立索引。
一般来说,如果工作是在SQL中完成的,那么为用户编写的代码要少得多。
特别是MySQL,它会在两个方面进行选择
案例1:对数据进行排序
O(N*log N)
,然后对数据进行线性传递;这可能涉及也可能不涉及会增加开销的I/O
案例2:在RAM中建立一个查找表,用于收集分组信息,然后对数据进行线性传递(不需要索引);但你需要这样的东西
O(N*log n)
用于计数/求和/无论分组值是多少。
笔记:
-
我曾经
N
表格中的数字或行,以及
n
获取输出中的行数。
-
我不知道会导致优化器选择一种方法而不是另一种方法的条件。
如果将所有数据拖到客户机中,可能会选择其中一种算法。如果您碰巧知道您是在一个简单的整数上分组,那么查找(对于第二种算法)可以是一个简单的数组查找--
O(N)
.但是,正如我所说,网络成本可能会降低性能。
编写is SQL非常简单:
SELECT DATE(`date`) AS "day",
MAX(value) - MIN(value) AS range
FROM tbl
GROUP BY DATE(`date`);