Bonjour,
J'ai un problème avec ma requête qui met trop longtemps à s’exécuter (~4s)
4 tables :
abonne{#id_abonne, nom, email, id_dept}
departement{#id_dept, nom_dept}
abonne_groupe{id_abonne, id_groupe}
groupe{#id_groupe, nom groupe}
un abonné est rattaché à un departement,
un abonné appartient à un ou plusieurs groupes.
Voila ce que je veux que ma requête fasse, qu'elle fait actuellement mais à la vitesse d'une limace:
Récupérer les abonnés (id, nom, email) avec le nom du département associé, et les groupes auxquels chaque abonne appartient (idéalement sous la forme : "nom_groupe, nom_groupe, nom_groupe"
LA REQUÊTE :
Le point clé ici c'est le GROUP BY / GROUP_CONCAT qui je pense ralentit la requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT ag.id_abonne, ab.nom, ab.email, ab.nom_dept, GROUP_CONCAT(g.nom_groupe SEPARATOR ', ') AS groupes FROM (SELECT a.id_abonne, a.nom, a.email, d.nom_dept, a.is_valid FROM abonne a LEFT OUTER JOIN departement d ON d.id_dept = a.id_dept ) as ab, abonne_groupe ag LEFT OUTER JOIN groupe g ON g.id_groupe = ag.id_groupe WHERE ag.id_abonne = ab.id_abonne GROUP BY ag.id_abonne ORDER BY ab.email
Je pourrais facilement passer par 2 requêtes
(select abonne + departement).
Un parcour (Select group where id_abonne).
Mais je n'aime pas la facilité.
Donc ma question est : puis-je optimiser cette requête? si oui comment ?
Merci de votre aide.
Partager