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