如何提高Insert INTO(...)select查询的性能?

时间:2019-08-05 13:46:05

标签: mysql

现在我正在尝试编写一个查询,以减少数据库中的数据。我的计划是在一分钟内得到平均值。

INSERT INTO reduced (current, total, time_stamp)
SELECT
    AVG(current) AS average,
    MAX(total) as total,
    MAX(time_stamp)
FROM
(
    SELECT * from data2  WHERE id <= '500' AND id >= '6'
) AS test
WHERE
    time_stamp <= '2019-05-03 21:24:30' AND
    time_stamp >= '2019-05-03 21:23:30'

如果我仅执行Select语句,则在0,002秒内完成。但是,一旦我添加了INSERT部分,它就需要几秒钟。 (3-5秒) 这里的问题是,我想对整个数据集重复该查询(总是加一分钟),这样将花费太多时间进行计算。 所以我想知道是否有一种方法可以加快此插入过程。 通常,insert语句也可以非常快速地工作。 因此,我认为在一个查询中链接插入并选择时会出现问题。

1 个答案:

答案 0 :(得分:1)

感谢Tim Biegeleisen,我想出了以下解决方案:

INSERT INTO reduced (current, total, time_stamp) 
SELECT AVG(current) AS average
     , MAX(total) as total
     , MAX(time_stamp) 
  FROM data2 
 GROUP 
    BY UNIX_TIMESTAMP(time_stamp) DIV 60 

这里的想法是使用group by创建时间间隔,这样我就不必通过循环遍历数据集,而只需要使用一次插入。