[英]Can I speed up a fairly simple select query over timestamps?
我有一個非常基本的查詢,但是運行需要很長時間。
我的MySQL服務器的詳細信息:
我在其上運行查詢的表有33列:時間戳記,以及32列帶有井名(例如LEW91_4)的列。 該表目前有約250萬條記錄。 孔列的數據類型為float。 索引是:
查詢:
SELECT
DATE_FORMAT(t_stamp, '%m/%d/%Y %h:00 %p') as 'Date',
AVG(LEW91_1R97) as 'LEW91_1R97',
AVG(LEW91_2R97) as 'LEW91_2R97',
AVG(LEW91_3R97) as 'LEW91_3R97',
AVG(LEW91_4) as 'LEW91_4',
AVG(LEW97_1) as 'LEW97_1',
AVG(LEW97_3) as 'LEW97_3',
AVG(LEW97_4) as 'LEW97_4',
AVG(LEW97_6) as 'LEW97_6',
AVG(LEW97_7) as 'LEW97_7',
AVG(LEW97_8) as 'LEW97_8',
AVG(LEW97_12) as 'LEW97_12'
FROM C1_Flows
WHERE DAY(t_stamp) = 28
AND MONTH(t_stamp) = 09
AND YEAR(t_stamp) = 2015
GROUP BY DAY(t_stamp), HOUR(t_stamp)
當我從MySQL Workbench運行查詢時,當前查詢大約需要11秒鍾才能運行。 當它在我用來開發HMI的基於Java的界面中運行時,它因特定錯誤“讀取超時”而超時。
我已經在類似的服務器(例如,聯接,聯合,if語句等)上運行了更為復雜的查詢,並且它們的運行速度比這一查詢更快。 有什么辦法可以加快速度,還是我遺漏了明顯的東西?
不使用
WHERE DAY(t_stamp) = 28
AND MONTH(t_stamp) = 09
AND YEAR(t_stamp) = 2015
用代替
WHERE t_stamp >= '2015-09-28' AND t_stamp < '2015-09-29'
要么
WHERE t_stamp >= '2015-09-28' AND t_stamp < ADDDATE('2015-09-28', INTERVAL 1 DAY)
並在t_stamp上有一個索引。 按照您的編寫方式,每條記錄都需要對where子句進行計算,並且不能使用索引。
采用:
WHERE t_stamp BETWEEN '2015-09-28 00:00' AND '2015-09-28 23:59:59'
匹配該日期的所有時間戳。
這將利用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.