У меня есть таблица с журналами данных GPS устройств logs(id - PK AI, device_id - FK, lat - DECIMAL, long - DECIMAL, time - DATETIME)
. Идентификатор является первичным ключом, и есть index on (id, device_id)
, и я хочу получить последние записи для каждого устройства.
Мой текущий запрос:
SELECT * FROM devices
WHERE devices.id IN (
SELECT MAX(id) FROM devices GROUP BY device_id
)
В таблице с 1,5 миллионами записейи для 5 уникальных устройств запрос занимает 8 секунд. Можно ли его оптимизировать? Устройства отправляют данные каждую секунду, и я ожидаю, что общее количество устройств составит 2000.
Это слишком медленно, даже с 5 устройствами.
Другой мой запрос - это выбор маршрута устройства за период времени. Это также занимает 10 секунд в течение дня.
Является ли MySQL правильным выбором для этой задачи? Должен ли я выбрать другую базу данных? Есть ли способ сделать запросы быстрее?
SQL-скрипта