2017-07-18 1 views
2

J'ai une table qui contient user_id, le temps, inhour et outHour comme celui-ciComment puis-je accélérer cette requête SELECT?

enter image description here

Je veux groupe avec user_id et obtenir le temps maximum avec des domaines connexes. Dans l'image ci-dessous, vous pouvez voir ce que je veux comme résultat.

enter image description here

Ma requête fonctionne bien. Mais je veux améliorer la vitesse, car cela fonctionne lentement pour les grandes données. Voici ma requête:

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); 

Je dois réduire drastiquement le temps de requête. Toute aide est grandement appréciée.

+0

Comment sont vos tableaux indexés? –

+0

Avez-vous créé l'index de user_id/time dans les deux tables? – Roy

+0

Il n'y a qu'une seule table @Roy –

Répondre

0

Groupwise-max?

Vous aurez besoin d'un indice composite. Votre requête existante bénéficierait de

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

Mon blog fournit des techniques encore plus rapide: http://mysql.rjweb.org/doc.php/groupwise_max