每 5 分钟,我的历史表就会(通过另一个进程)更新一次新记录(TAG_NAME 保持不变,但 TIME 和 VALUE 会更新)。我使用以下查询返回最新记录,同时还按 TAG_NAME 进行分组。
SELECT
TAG_NAME,max(TIME) as max_time,
(select value from historical where TAG_NAME=hist.TAG_NAME order by time desc limit 1) as max_value
FROM historical hist
WHERE TIME IS NOT NULL AND GROUP BY TAG_NAME;
对于具有 100k 行的表,此查询需要长达 1 分钟的时间。谁能帮我优化这个查询?
非常感谢!
最佳答案
您可以获得组合最大值,因此如果两次相同,您将获得最大值。
select TAG_NAME, max(concat(time,value)) as time_value
from historical
group by TAG_NAME
如有必要,您可以在 mySQL 中拆分时间和值(value),但您也可以在应用程序中拆分它。
关于带子选择的 Mysql 查询花费太长时间..,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104352/