如何优化Mysql查询计算日期和最小/最大/平均值?

如何优化Mysql查询计算日期和最小/最大/平均值?,mysql,optimization,Mysql,Optimization,我有一张有时间戳的测量表。每5分钟一个数据。 我创建了一个视图,每30分钟提取一次平均/最小/最大值。问题是我发现这个查询非常慢(+/-5秒,总共13290行…这是非常少的 有优化的想法吗 我的代码: SELECT t_mesures.sonde_id AS sonde_id ,min(t_mesures.timestamp) AS start_period ,max(t_mesures.timestamp) AS end_period ,from_unixtime(

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

有优化的想法吗

我的代码:

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)

正如你已经注意到的,计算这些生活中的事情往往变得相当沉重

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


或者,您也可以尝试类似的操作,或者

此主题与Highcharts无关,因为它只是SQL查询。您的意思是启动另一个cron任务来更新包含合并值的新表吗?一个表平均30分钟,一个表平均3小时,第三个表平均每天。MySQL DB大小不会爆炸?bug DB无法使查询速度变慢?要么是新的cronjob,要么是动态计算。您可以使用存储过程轻松完成这些操作,尽管我不确定这是否是MySQL的简单解决方案。是的,它需要更多的存储空间,但不会太多。通过这种方式,您还可以删除旧数据,例如,对于您丢失的旧数据ght不再需要5分钟的精度,但30分钟就足够了。我上面的查询确实是为了计算30分钟的平均值。因此,我不认为使用存储过程有什么好处。在添加新行时,您可以在普通表上有一个存储过程来自动更新摘要数据。
MAX()
可以用
最大值()
处理,
计数()
只是一个
+1
,等等。。。