2012-05-19 63 views
0

我的數據集是一個包含3行的表:硬盤的ID,空白空間的百分比,時間戳。該表每20分鐘附加一個每個HDD的新狀態(1200個)。MySQL:根據時間戳間隔選擇數據

如果我想選擇我的硬盤池的最後一個狀態,我需要MAX(時間戳)和MIN(時間戳),如果我想要最老的。

但是說我有一個給定的時間戳,我怎麼能要求MySQL從這個時間戳的大約X秒鐘內檢索數據?

回答

1
WHERE yourTimeStamp 
    between TIMESTAMPADD(SECOND,-3,yourtimestamp) 
     and TIMESTAMPADD(SECOND, 3,yourtimestamp) 

其中-3和+ 3代替X

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampadd獲取更多幫助。

+0

它的工作原理!但速度很慢。有關如何加快此任務的任何想法? – Cystack

+0

我需要看到連接有可能有一種方法來計算timestampadd ONCE並將其用於每條記錄而不是每條記錄。我也得看看你是如何得到「MAX」等幾件事的。您使用的SQL以及執行計劃將有助於確定瓶頸的位置以及解決性能問題。 – xQbert

1

像這樣:

WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND) 
    AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND); 

正如在其他答覆中提到,當選擇是基於timestamp現場查詢速度很慢。

您可以在該列中添加INDEX加快步伐:

ALTER TABLE <table_name> ADD INDEX(`timestamp`) 

需要注意的是,根據您的表的大小,你第一次添加需要一段時間的索引。其次,它會減慢INSERT查詢並增加數據庫的大小。這對每個人都是不同的,所以你只能通過測試找出答案。

+0

它給出了語法錯誤:/ – Cystack

+0

@Cystack對不起,你是對的。修正了......順便說一句,爲了加快基於你的時間戳記字段的查詢,你必須在該列上添加一個索引 –

+0

它已經被編入索引,它只需要大約16秒,我認爲這是相當長的:/你的代碼現在工作儘管;)和其他一樣快(或慢)!謝謝 – Cystack