使 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 DATE
或 TIME
或 DATETIME
可以被视为这样的数据类型 或 被视为 VARCHAR
。我要求它是一个字符串。
即使在这种情况下,也没有索引有用。但是,这会使速度更快:
PRIMARY KEY(time)
而 table 将只有 2 列:时间、konyha1。
很少 将日期 and/or 时间分解成组件并将它们放入列中。
一百万个点可能会使绘图程序窒息。还有屏幕——分辨率只有几千。
也许你应该按小时分组?并使用 LEFT(time, 13)
?性能可能会稍微快一些——但这只是因为发送到客户端的数据较少。
如果您要“永远”收集此数据,请考虑构建和维护每个时间单位的平均值“摘要table”。然后,增量工作就是每天早上汇总昨天的数据。
您可能会发现 MIN(konyha1)
和 MAX(konyha1)
每小时或每天保持有趣。请注意,每日或每周的聚合可以从每小时的值中得出。
这是我的数据 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 DATE
或 TIME
或 DATETIME
可以被视为这样的数据类型 或 被视为 VARCHAR
。我要求它是一个字符串。
即使在这种情况下,也没有索引有用。但是,这会使速度更快:
PRIMARY KEY(time)
而 table 将只有 2 列:时间、konyha1。
很少 将日期 and/or 时间分解成组件并将它们放入列中。
一百万个点可能会使绘图程序窒息。还有屏幕——分辨率只有几千。
也许你应该按小时分组?并使用 LEFT(time, 13)
?性能可能会稍微快一些——但这只是因为发送到客户端的数据较少。
如果您要“永远”收集此数据,请考虑构建和维护每个时间单位的平均值“摘要table”。然后,增量工作就是每天早上汇总昨天的数据。
您可能会发现 MIN(konyha1)
和 MAX(konyha1)
每小时或每天保持有趣。请注意,每日或每周的聚合可以从每小时的值中得出。