使 groupby 查询更快

Making a groupby query faster

这是我的数据 table:

我的意思是我正好有一百万行,所以它只是一个片段。 我想让这个查询更快:

这基本上是按时间对值进行分组(ev 代表年份 honap 代表月份等等)。它有一个问题,那就是需要花费很多时间。我尝试应用索引,您可以在此处看到:

但它什么也没做。 这是我的索引:

由于基数原因,我也尝试过放置 perc(表示分钟),但 mysql 不想使用它。你能给我一些建议吗?

数据真实吗?如果是这样,为什么 运行 查询 - 它基本上提供了 table.

中的内容

另一方面,如果您每分钟有 几行 行,那么 GROUP BY 是有意义的。

你的索引不值得使用。但是,优化器似乎喜欢它。这是一个错误。

在那种情况下,我会简单地这样:

SELECT AVG(konyha1) AS 'avg',
       LEFT(time, 16) AS 'time'
    FROM onemilliondata
    GROUP BY LEFT(time, 16)

A DATETIMEDATETIME 可以被视为这样的数据类型 被视为 VARCHAR。我要求它是一个字符串。

即使在这种情况下,也没有索引有用。但是,这会使速度更快:

PRIMARY KEY(time)

而 table 将只有 2 列:时间、konyha1。

很少 将日期 and/or 时间分解成组件并将它们放入列中。

一百万个点可能会使绘图程序窒息。还有屏幕——分辨率只有几千。

也许你应该按小时分组?并使用 LEFT(time, 13)?性能可能会稍微快一些——但这只是因为发送到客户端的数据较少。

如果您要“永远”收集此数据,请考虑构建和维护每个时间单位的平均值“摘要table”。然后,增量工作就是每天早上汇总昨天的数据。

您可能会发现 MIN(konyha1)MAX(konyha1) 每小时或每天保持有趣。请注意,每日或每周的聚合可以从每小时的值中得出。