Aller au contenu

Count et LEFT JOIN


billcom
Aller à la solution Solutionné par jcaron,

Sujets conseillés

Bonjour le hub,



Je viens soliciter votre aide afin d'optimiser une requête MYSQL.


J'ai une


table1 (id1, champ1, champ11) qui est lié à la


table2(id2, champ2, champ21, id1)



J'aimerai effectcuer une requête qui va me récupérer les enregistrement de la table1 en effectuant un compte sur les id2 (count(id2)) répondant positivement à la jointure JOIN table2 on (table1.id1 = table2.id1)



En fouillant un peu je suis arrivé à ce type de requête








SELECT t1.id1, champ1, champ11, t2.nbElem
FROM (
`table1` t1
)
LEFT JOIN (SELECT count(id2) as nbElem, id1 FROM table2 group by id1) as t2 ON (t1.`id1` = t2.`id2` )
GROUP BY t1.id1
LIMIT 10

Cette requête fonctionne mais ma table t2 possède 20 000 enregistrements donc à chaque execution de la requête mon serveur va effectuer "SELECT count(id2) as nbElem, id1 FROM table2 group by id1" sur les 20000 enregistrements avant de ne m'afficher que les 10 premier résultat souhaité signalé par le LIMIT 10.


Soit en moyenne 15s par requête.



Avez vous une idée? une solution pour accélérer ce traitement ?



Merci de votre aide






Lien vers le commentaire
Partager sur d’autres sites

Salut jcaron


tout d'abord merci pour ton aide.



Il semblerai que l'ajout d'un index sur t2.id1 ai optimisé grandement la chose.


J'ai également simplifié ma requête comme tu le suggère et tout semble fonctionner au top. J'ai simplement modifier le count(*) pour me limiter à un count(t2.id1)



Affichage des lignes 100 - 99 ( 100 total, Traitement en 0.1608 sec)



Je vais mettre tout ça en pratique



Merci a_thumbsup_20.gif


Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...