优化 SQLite max() 查询

Optimizing an SQLite max() query

我有一个 table 有几亿条记录,大约有 15 个不同的列。这些数据包括其他速度记录,带有时间戳、被跟踪车辆的 ID 和速度记录。单个车辆可以有数十万个速度记录,并且有大约 40 000 种不同的车辆。

我想找出每辆车的最高速度记录。

正在查询:

SELECT userid, max(speed) from SpeedReadings group by userid

需要很多时间,所以我想优化一下。我的第一个想法是用 userid 和 speed 创建一个索引。查询中变量的顺序和索引 table 重要吗?

这两个查询之间是否存在速度差异:

SELECT userid, max(speed) from SpeedReadings group by userid

SELECT distinct userid, max(speed) from SpeedReadings

优化分组的最佳方法是将数据存储在按用户ID 排序的列表中,这样数据库就不需要保留所有可能的结果。 换句话说,您需要一个索引,其中 userid 是第一列。

为了进一步加快计算速度,将 speed 列附加到索引以获得 covering index.

查询中列的顺序无关紧要。

与查询 SELECT distinct userid, max(speed) from SpeedReadings 存在速度差异,但我猜你想得到正确的结果,所以差异无关紧要。