簡體   English   中英

我可以在時間戳上加速一個相當簡單的選擇查詢嗎?

[英]Can I speed up a fairly simple select query over timestamps?

我有一個非常基本的查詢,但是運行需要很長時間。

我的MySQL服務器的詳細信息:

  • Ubuntu Server 14.04,64位作為VMWare Workstation虛擬機運行
  • 2GB專用於VM的RAM

我在其上運行查詢的表有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)

當我從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.

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