我有我認爲是一個非常基本的查詢,但它需要很長時間才能運行。我的MySQL服務器的我可以加速一個相對簡單的時間戳選擇查詢嗎?
具體細節:
- Ubuntu服務器14.04,運行64-bit作爲VMware Workstation虛擬機
- 2GB的RAM專用於VM
我的表m運行查詢有33列:一個時間戳和32個有良好名稱的列(例如LEW91_4)。目前在表中有大約250萬條記錄。井列的數據類型爲float。索引是:
- 柱:NDX,指數:PRIMARY
- 柱:t_stamp,指數:C1_Flowst_stampndx
查詢:
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)
查詢目前正在大致11秒當我從MySQL Workbench運行它時運行。當它從我用來開發HMI的基於Java的界面中運行時,它會超時出現「Read timed out」特定錯誤。
我在類似的服務器上運行了更復雜的查詢(即連接,聯合,if語句等),並且它們比這個運行得更快。有沒有一種方法可以加快速度,或者我錯過了一些明顯的東西?
從輸出中忽略所有平均值的結果然而,當從不同的(Java)上下文中調用'read timed out'時聽起來好奇。超時是否設置了某種實用性? – user2864740
WHERE子句過濾之後,剩餘多少條記錄? –
在t_stamp上加上一個索引並使用'WHERE t_stamp ='2015-09-28''看看是否有改進 – fthiella