我有一张包含数亿条记录的表格,大约有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
答案 0 :(得分:1)
优化分组的最佳方法是将数据存储在按用户ID排序的列表中,这样数据库就不需要保留所有可能的结果。
换句话说,您需要一个索引,其中userid
是第一列。
要进一步加快计算速度,请将speed
列附加到索引以获取covering index。
查询中列的顺序无关紧要。
查询SELECT distinct userid, max(speed) from SpeedReadings
存在速度差异,但我想您希望获得正确的结果,因此差异并不重要。