我使用的是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行。