带子选择的 Mysql 查询花费太长时间..

标签 mysql sql

每 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/

相关文章:

sql - 在 postgres 中两个表之间的联接、聚合和转换

java - Mysql错误: field 'XXX' doesn't have a default value

sql - Postgres - 用递增的值更新 CTE

MySQL 在创建表时替换列类型

C# Nhibernate - 向多对多关系添加新项目

c# - 如果在 sql server 中回滚事务,它会删除临时表(在事务中创建)吗?

SQL:查询变量是字段的后缀,反之亦然

MySQL 添加 COUNT( ) 值

php - 在 LAMP 服务器上使用 PHP 从 MySQLi 输出 JSON api

MySQL - 在逗号分隔的数字字符串中查找数字