[英]What index or other database to use to speed this aggregating query up
我已將時間序列存儲在MySQL表中[int(11)int(11)]第一列是以毫秒為單位的紀元時間,第二列是當時的值。
有25920000條記錄。 當我想繪制數據時,我不想每毫秒繪制一次,而只是以某個分辨率繪制,我使用以下查詢:
SELECT AVG(value) FROM measurements GROUP BY ts DIV (1000*60*60*24)
這已經花費了1.5分鍾,比我想要的要長。
是否可以使用某個索引來加速此查詢?
或者,也許還有另一個更適合於此的DBMS。
根據評論中的要求:
CREATE TABLE measurements (ts INT(11), value INT(11))
15151,11
15152,15
15153,50
15154,100
....
請注意,我目前正在實驗整數數據,將來它將是浮點數據
您還可以使用PERSISTENT列,這些列將即時生成日期並具有索引
CREATE TABLE `measurements ` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`datum` date AS (DATE(ts)) PERSISTENT,
`ts` int(11) DEFAULT NULL,
`value` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `datum` (`datum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
為了加快處理速度(並確保可以成功使用索引),您可以為分辨率添加不同的列,並根據時間戳值對其進行預先計算。 之后,將索引添加到此(這些)列,它應該更快,因為您不必在與之分組之前計算所有值。
我知道這不是最好的靈活方式,但可能是一個很好的權衡。
編輯:如果您填寫此表,則還可以立即預先計算這些值,因此無需重新計算大量數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.