优化SQLite max()查询

时间:2017-03-23 11:55:15

标签: performance sqlite aggregates

我有一张包含数亿条记录的表格,大约有15个不同的列。数据包括速度记录,时间戳,被跟踪的车辆上的id和速度记录。单个车辆可以有数十万个速度记录,并且有大约40 000个不同的车辆。

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

只是查询:

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

花了很多时间,所以我想优化它。我的第一个想法是用userid和speed制作一个索引。查询中的变量顺序和索引表是否重要?

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

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

SELECT distinct userid, max(speed) from SpeedReadings

1 个答案:

答案 0 :(得分:1)

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

要进一步加快计算速度,请将speed列附加到索引以获取covering index

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

查询SELECT distinct userid, max(speed) from SpeedReadings存在速度差异,但我想您希望获得正确的结果,因此差异并不重要。