簡體   English   中英

使用什么索引或其他數據庫來加快聚合查詢的速度

[英]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.

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