我在 mysql 表TEST中有几百万条记录。
TEST表的一列 ( TRIAL_TIME )将 EPOCH 时间存储为 BIGINT。触发 sql 查询,该查询使用GROUP BY子句在 TRIAL_TIME 上对数据进行分组。
查询是这样的。
SELECT SUM(A1), COUNT(B1)
from TEST
WHERE <some clause>
GROUP BY TRIAL_TIME DIV 300000
ORDER BY <some column>;
上述查询中的 300000 表示我想将数据分组的时间。例如,如果我想按 1 分钟对数据进行分组,我会使用 60000。然后查询变为
SELECT SUM(A1), COUNT(B1)
from TEST
WHERE <some clause>
GROUP BY TRIAL_TIME DIV 600000
ORDER BY <some column>;
问题是
- 这将是一个有效的查询吗?
- 如果没有,什么是更好的方法?
- 打开以使用 ALTER 表以适应更好的解决方案。
一种可能的解决方案是添加新列并解析 EPOCH 时间以提取 DATE、TIME 等字段并使用适当的值更新新创建的列,以便GROUP BY变得更容易。
想知道这是否是一个明智的解决方案?
注意 - 记录使用 mysql 5.1 和 Infobright 引擎。当前查询大约需要 3 分钟来执行(因为 GROUP BY CLAUSE)。性能目标是将其控制在 30 秒以下。