簡體   English   中英

帶有子選擇的MySQL查詢花費的時間太長。

[英]Mysql query with sub-selects taking too long..

我的歷史記錄表每隔5分鍾就會通過新記錄更新(通過另一個過程)(TAG_NAME保持不變,但TIME和VALUE被更新)。 我正在使用以下查詢返回LATEST記錄,同時也按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;

在具有10萬行的表上,此查詢最多需要1分鍾。 誰能幫助我優化此查詢?

非常感謝!

嘗試這個:

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

您可以獲得合並的最大值,因此,如果兩次相同,則將獲得最大價值。

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

如有必要,您可以在mySQL中拆分時間和值,但也可以在應用程序中拆分它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM