【发布时间】:2019-10-04 19:37:57
【问题描述】:
我有一张记录设备 GPS 数据 logs(id - PK AI, device_id - FK, lat - DECIMAL, long - DECIMAL, time - DATETIME) 的表格。 Id 是主键,有一个index on (id, device_id),我想获取每个设备的最新记录。
我目前的查询是:
SELECT * FROM devices
WHERE devices.id IN (
SELECT MAX(id) FROM devices GROUP BY device_id
)
在包含 150 万条记录和 5 个唯一设备的表上,查询需要 8 秒。是否可以对其进行优化?这些设备每秒都在发送数据,我预计总共有 2000 台设备。
即使有 5 个设备也太慢了。
我的另一个查询是在一段时间内选择设备的路由。一天的时间也需要 10 秒。
MySQL 是该任务的正确选择吗?我应该选择另一个数据库吗?有没有办法让查询更快?
【问题讨论】:
-
用小提琴编辑 - sqlfiddle.com/#!9/2de1aa/1/0
-
您需要添加
INDEX(device_id, id)。同时,INDEX(id, device_id)可能没用。
标签: mysql sql database logging query-optimization