miałem problemy z moim zapytaniu, które trwało 17 sekund, aby wykonać (350k wierszy):Wydajność zapytania; nie wiem, co się dzieje
SELECT idgps_unit, MAX(dt)
FROM gps_unit_location
GROUP BY 1
Wyjaśnić
1 SIMPLE gps_unit_location index fk_gps2 5 422633
Po grać z nim, ja przyszedłem z tego rozwiązania, które odbywają 1 sekunda:
Select idgps_unit, MAX(dt) from (
SELECT idgps_unit, dt
FROM gps_unit_location
) d1
Group by 1
Wyjaśnij:
1 PRIMARY <derived2> ALL 423344 Using temporary; Using filesort
2 DERIVED gps_unit_location index gps_unit_location_dt_gpsid 10 422617 Using index
A teraz jestem zdezorientowany - dlaczego zapytanie # 2 jest szybkie, podczas gdy zapytanie # 1 wydaje się być tym samym zapytaniem i wydaje się być napisane bardziej wydajnie.
index1 DT, Index2: idgps_unit, Index3: idgps_unit + DT
czasy wykonania są zgodne; zapytanie # 1 zawsze trwa od 17 do 19 sekund; podczas gdy # 1 < 1sec.
Używam GoDaddy VPS Windows Server 2008 Economy
przykład Tabela:
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
mysql lub tsql?!? –
Czy czas wykonywania obu zapytań jest spójny? Ponieważ jest możliwe, że wyniki są buforowane, gdy pierwsze zapytanie zostało wykonane i użyte przez drugie zapytanie. – Slowcoder
Jeśli mógłbyś opublikować wynik uruchomienia 'EXPLAIN' na tych zapytaniach, może to być pomocne. –