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 тыс. Строк.

0 ответов

Другие вопросы по тегам