我的數據集是一個包含3行的表:硬盤的ID,空白空間的百分比,時間戳。該表每20分鐘附加一個每個HDD的新狀態(1200個)。MySQL:根據時間戳間隔選擇數據
如果我想選擇我的硬盤池的最後一個狀態,我需要MAX(時間戳)和MIN(時間戳),如果我想要最老的。
但是說我有一個給定的時間戳,我怎麼能要求MySQL從這個時間戳的大約X秒鐘內檢索數據?
我的數據集是一個包含3行的表:硬盤的ID,空白空間的百分比,時間戳。該表每20分鐘附加一個每個HDD的新狀態(1200個)。MySQL:根據時間戳間隔選擇數據
如果我想選擇我的硬盤池的最後一個狀態,我需要MAX(時間戳)和MIN(時間戳),如果我想要最老的。
但是說我有一個給定的時間戳,我怎麼能要求MySQL從這個時間戳的大約X秒鐘內檢索數據?
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獲取更多幫助。
像這樣:
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
查詢並增加數據庫的大小。這對每個人都是不同的,所以你只能通過測試找出答案。
它的工作原理!但速度很慢。有關如何加快此任務的任何想法? – Cystack
我需要看到連接有可能有一種方法來計算timestampadd ONCE並將其用於每條記錄而不是每條記錄。我也得看看你是如何得到「MAX」等幾件事的。您使用的SQL以及執行計劃將有助於確定瓶頸的位置以及解決性能問題。 – xQbert