0

我正在使用 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

这张桌子有〜50m。记录。

这是我的查询:

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 秒。和子查询的时间0.003 秒。

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

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

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

4

0 回答 0