0

我有一个带有时间戳的测量表。每 5 分钟一个数据。我创建了一个视图来提取每 30 分钟的平均值/最小值/最大值。问题是我发现这个查询非常慢(总共 13290 行 +/- 5 秒......这很少......

任何优化的想法?

我的代码:

SELECT t_mesures.sonde_id AS sonde_id
    ,min(t_mesures.timestamp) AS start_period
    ,max(t_mesures.timestamp) AS end_period
    ,from_unixtime(
        unix_timestamp(min(t_mesures.timestamp))+
        floor( (unix_timestamp(max(t_mesures.timestamp))-unix_timestamp(min(t_mesures.timestamp)))/2)
     ) AS mid_period
    ,timediff(max(t_mesures.timestamp), min(t_mesures.timestamp)) AS dur_period  
    ,avg(t_mesures.Mesure) AS avg_mesure
    ,min(t_mesures.Mesure) AS min_mesure
    ,max(t_mesures.Mesure) AS max_mesure
    ,count(t_mesures.Mesure) as nb_mesure
FROM t_mesures
GROUP BY t_mesures.sonde_id
    ,(floor((unix_timestamp(t_mesures.timestamp) / 1800)) * 1800)
4

1 回答 1

1

正如您已经注意到的那样,实时计算这些东西往往会变得非常繁重。

确保你没有这个问题的最好方法就是不计算它。除了存储 5 分钟间隔数据之外,您还应该存储 30 分钟最小/最大/平均/计数数据(和/或您将使用的任何其他间隔)。

或者,您也可以尝试WhisperRRDOpenTSDB 之类的东西

于 2013-07-15T11:53:17.320 回答