Запрос действительно прост, т.е.
SELECT
col1 , date_col
FROM table USE INDEX (device_date_col)
WHERE
device_id = "some_value"
AND date_col BETWEEN "2020-03-16 00:00:00" and "2020-04-16 00:00:00"
limit 1000000 ;
, но для окончательного возврата результата требуется 30–60 секунд, когда он запускается в первый раз. И тогда он возвращает результат менее чем за 10 секунд. И еще одна проблема заключается в том, что когда я меняю device_id, это снова занимает много времени. Я не могу понять, почему это происходит при использовании правильной индексации.
Мы знаем, что у шлюза API есть ограничение в 30 секунд из-за этого времени ожидания нашего API. Это происходит внезапно с сегодняшнего дня.
Основная цель - извлекать мелкие данные, он возвращает меньше данных, но также занимает много времени, т. Е.
....
AND col1 IS NOT NULL
GROUP BY
DATE(date_col),
HOUR(date_col),
MINUTE(date_col)
Ниже приведена полезная информация
- AWS RDS с экземпляром db.m4.large (vCPU 2 и RAM 8 ГБ).
- MySql версия 5.6.x
- составной индекс для date_col и device_col
- с использованием InnoDB
- таблица не имеет поля идентификатора (первичный ключ)
- общее количество строк в таблице - 7,5 миллиона
- каждое устройство имеет данные каждые 3 секунды
- запросы возвращают строки вокруг 600k
- запрос объяснения показывает, что он использует индексирование
![List item](https://i.stack.imgur.com/DqwLd.png)
ОБНОВЛЕНИЕ
MySql Показы рабочей среды что, когда я запускаю запрос без группы, для его выполнения требуется 2 секунды, но для извлечения> 30 секунд, а когда я использую группу к тому времени, для выполнения сервера требуется> 30, а для извлечения - 2 секунды. Я думаю, нам нужно больше
- Процессор для обработанных данных с использованием групп по
- Больше оперативной памяти для извлечения всех данных ( без группировки по)
Ниже на рисунке показан ответ на запрос без группировки по. Посмотрите на продолжительность / время выборки
![enter image description here](https://i.stack.imgur.com/oFf9m.png)