使用子选择的Mysql查询耗时太长..

时间:2015-08-19 19:45:47

标签: 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分钟。任何人都可以帮我优化这个查询吗?

非常感谢!

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT 
TAG_NAME, max(`TIME`) as max_time, max(`value`) as max_value
FROM historical
WHERE `TIME` IS NOT NULL 
GROUP BY TAG_NAME
;

答案 1 :(得分:0)

你可以获得组合的最大值,所以如果两次相同则得到最大的值。

select TAG_NAME, max(concat(time,value)) as time_value
from historical 
group by TAG_NAME

如果需要,您可以在mySQL中分配时间和值,但您也可以在应用程序中将其拆分。

答案 2 :(得分:0)

http://sqlfiddle.com/#!9/6d210/1

SELECT 
h.*
FROM historical h
LEFT JOIN historical h1
ON h.TAG_NAME = h1.TAG_NAME
  AND h.time<h1.time
WHERE h1.time IS NULL