2017-07-18 6 views
2

Ich habe eine Tabelle, die user_id, Zeit, inHour und outHour wie dieseWie kann ich diese SELECT-Abfrage beschleunigen?

enter image description here

ich gruppieren möchten mit user_id und bekommen max Zeit mit verwandten Bereichen enthält. Im Bild unten können Sie sehen, was ich als Ergebnis möchte.

enter image description here

Meine Abfrage funktioniert gut. Aber ich möchte Geschwindigkeit verbessern, weil es für große Daten langsam arbeitet. Hier ist meine Abfrage:

SELECT 
    foo.user_id, 
    foo.time, 
    foo.inHour, 
    foo.outHour 
FROM 
(
    SELECT 
     MAX(time) AS time, 
     user_id 
    FROM 
     foo 
    GROUP BY user_id 
) AS t1 
INNER JOIN foo ON (t1.user_id = foo.user_id AND t1.time = foo.time); 

Ich muss die Abfragezeit drastisch reduzieren. Jede Hilfe wird sehr geschätzt.

+0

Wie werden Ihre Tabellen indiziert? –

+0

Haben Sie in beiden Tabellen einen Index für user_id/time erstellt? – Roy

+0

Es gibt nur eine Tabelle @Roy –

Antwort

0

Groupwise-max?

Sie benötigen einen zusammengesetzten Index. Ihre vorhandene Abfrage würde profitieren von

INDEX(user, time) -- in this order! 

Mein Blog bietet eine noch schnellere Techniken: http://mysql.rjweb.org/doc.php/groupwise_max

Verwandte Themen