MySQL Performance MAX()每天都有

时间:2017-11-06 14:02:58

标签: mysql performance aggregate-functions groupwise-maximum groupwise

我使用的是mysql 5.5

这是我的表:

CREATE TABLE `temperature_information` 
(
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `device` int(11) NOT NULL,
   `temperature` int(11) NOT NULL,
   `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`),
   KEY `device` (`device`),
   KEY `date` (`date`),
   KEY `idx` (`device`, `date`)
) ENGINE=InnoDB AUTO_INCREMENT=25602738 DEFAULT CHARSET=latin1

这张桌子有~50米。记录。

这是我的问题:

SELECT 
    date AS ValueDate, MAX(temperature)
FROM 
    (SELECT 
         date, temperature 
     FROM 
         temperature_information 
     WHERE 
         device = 1111 
     ORDER BY 
         temperature DESC) c 
GROUP BY 
    DATE(ValueDate), HOUR(ValueDate) 

此查询返回每天的最高温度。它的执行时间 ~0.9 s。和子查询的时间 0.003秒。

我在日期和设备上有日期索引,设备列和多列索引idx。说明它使用设备索引进行查询,这很好(子查询非常快)。但是为了获得每天的最高温度,我需要使用Group BY。我知道索引列上的功能会禁用索引的使用,但我不知道解决方法如何使其高效并产生相同的结果。

我的问题:是否可以编写更高效的查询并产生相同的结果,或者我应该处理子查询返回的行并找到我自己每天的最高温度(这将是写在c)?

子查询平均返回20-40k行。

0 个答案:

没有答案