MySQL Performance MAX() на каждый день
Я использую 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 с. и время подзапроса 0,003 сек.
У меня есть индекс по дате, столбцы устройства и многоколонный индекс idx по дате и устройству. Объясните, что он использует индекс устройства для запроса, что хорошо (подзапрос очень быстрый). Но чтобы получить максимальную температуру на каждый день, мне нужно использовать группу BY. Я знаю, что функция в индексированном столбце отключает использование индекса, но я не знаю обходного пути, как сделать его эффективным и дать такие же результаты.
Мой вопрос: возможно ли написать запрос, который был бы более эффективным и дал бы те же результаты, или я должен обработать строки, возвращаемые подзапросом, и самостоятельно найти максимальную температуру для каждого дня (это было бы написано в c)?
Подзапрос возвращает в среднем 20-40 тыс. Строк.