Je cette requête à effectuer:requête MySQL - aide pour améliorer
SELECT u1.firstname,
u1.lastname,
u1.totalcommission,
u1.userid,
count(DISTINCT u2.userid) AS level1,
count(DISTINCT u3.userid) AS level2
FROM users AS u1
INNER JOIN users AS u2 ON u1.userid = u2.affiliate1
AND u2.signupdate BETWEEN '2011-01-01 00:00:00' AND '2013-04-02 23:59:59'
LEFT JOIN users AS u3 ON u1.userid = u3.affiliate2
WHERE u1.usertypeid != '1'
GROUP BY u1.userid
ORDER BY count(DISTINCT u2.userid) DESC
Les index de la table:
PRIMARY BTREE Yes No userid 41318 A No
email BTREE Yes No email 41318 A No
affiliate1 BTREE No No affiliate1 1967 A Yes
affiliate2 BTREE No No affiliate2 258 A Yes
signupdate BTREE No No signupdate 41318 A No
La requête fonctionne, mais le problème est qu'il est vraiment lent (le les utilisateurs de table ont 43k lignes, pas plus), cela prend environ 10sec, en raison des fonctions de comptage (distinctes). Y a-t-il un moyen de le remplacer par quelque chose de plus performant?
Merci,
/Luca
et vous affichez les structures de toutes les tables? Quels sont les index sur la table? –
Pourriez-vous ajouter "DESC" avant la requête et ajouter la sortie de cette requête à votre question? Cette requête vous montrera où et quelles clés sont utilisées. –