У меня средняя и большая таблица (около 350000 записей и растет). Мне нужно получить каждую последнюю запись для пары dev_id и var_id из таблицы. Я на самом деле могу их получить, но запрос занимает около 20 секунд, и это неприемлемо для моих целей.
Я пытаюсь следующий запрос на сервере MySQL с MariaDB:
select d.dev_id, d.var_id, d.ts, d.value from data_table d
where d.ts > NOW() - INTERVAL 2 DAY
and ts = (SELECT MAX(ts) FROM data_table WHERE dev_id = d.dev_id AND var_id = d.var_id)
ORDER BY d.dev_id
Таблица имеет следующую структуру:
id | dev_id | frame_number | var_id | value | ts
1 | 2 | 1 | 2 | 65.5 | 2019-10-10 19:56:05
2 | 3 | 5 | 4 | 23 | 2019-10-10 20:56:06
3 | 2 | 1 | 2 | 65.5 | 2019-10-10 20:59:30
. | . | . | . | . | .
. | . | . | . | . | .
. | . | . | . | . | .
300k| 5 | 100 | 7 | -15.23| 2020-10-10 20:59:30
Мне нужно получить более быстрый ответ на подобный запрос, но моего опыта недостаточно, чтобы обнаружить узкое место в запросе
Заранее благодарим вас за все
РЕДАКТИРОВАТЬ 1: Я не могу пропустить ORDER BY, но улучшение пропускает низкое (20 секунд против 18,5 секунд)
РЕДАКТИРОВАТЬ 2: схема данных_таблицы
РЕДАКТИРОВАТЬ 3 и как это исправить: Добавлено (dev_id, var_id и ts) в качестве индекса (индекс основан на нескольких столбцах). Запрос теперь требует только 0,6 секунд