У меня есть очень медленный запрос MySQL следующим образом:Очень медленный простой MySQL запрос
SELECT function, CONVERT_TZ(`time`, '+01:00','+01:00')
FROM `function_logger`
WHERE unit_id=3067785
and part_id=3 and channel=0
and `time` > NOW()-INTERVAL 1 DAY
order by time;
для следующей структуры таблицы
CREATE TABLE IF NOT EXISTS `function_logger` (
`id` int(11) NOT NULL,
`unit_id` int(11) NOT NULL,
`part_id` tinyint(4) NOT NULL DEFAULT '0',
`channel` tinyint(4) NOT NULL DEFAULT '0',
`function` tinyint(11) NOT NULL,
`time` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `function_logger`
ADD PRIMARY KEY (`id`),
ADD KEY `unit_id` (`unit_id`);
Таблица содержит около 80 миллионов записей, но занимает около минуты до запустить. После кэширования это нормально.
unit_id содержит около 3000 различных случайных чисел, part_id ДО 10 и канала ДО 3.
Есть в любом случае, чтобы ускорить этот процесс?
Помогла ли разметка?
Добавить индекс покрытия 'изменить таблицу function_logger добавить индекс search_idx (unit_id, part_id, канал, время)' –
Какой смысл в преобразовании 'time' из одного часового пояса в той же временной зоне? – eggyal
@AbhikChakraborty: Это не индекс покрытия ... – eggyal