我的查询有问题,需要 17 秒才能执行(350k 行):
SELECT idgps_unit, MAX(dt)
FROM gps_unit_location
GROUP BY 1
解释
1 SIMPLE gps_unit_location index fk_gps2 5 422633
玩过之后,我得到了这个需要 1 秒的解决方案:
Select idgps_unit, MAX(dt) from (
SELECT idgps_unit, dt
FROM gps_unit_location
) d1
Group by 1
解释:
1 PRIMARY <derived2> ALL 423344 Using temporary; Using filesort
2 DERIVED gps_unit_location index gps_unit_location_dt_gpsid 10 422617 Using index
现在我很困惑——为什么查询 #2 很快,而查询 #1 似乎是同一个查询,并且似乎写得更有效。
Index1:DT,Index2:idgps_unit,Index3:idgps_unit+DT
执行时间一致;查询 #1 总是需要 17-19 秒;而#1 <1 秒。
我正在使用 Godaddy VPS Windows Server 2008 Economy
表格示例:
id | idgps_unit | dt | location
1 | 1 | 2012-01-01 | 1
2 | 1 | 2012-01-02 | 2
3 | 2 | 2012-01-03 | 3
4 | 2 | 2012-01-04 | 4
5 | 3 | 2012-01-05 | 5