Dans le cadre de l'optimisation des requêtes SQL d'un site web, je me retrouve avec une grande question dont je n'ai pas trouvé de réponse dans la documentation officielle de MySQL.
Ma question concerne donc la requête suivante:
SELECT a.id,a.forum_name,a.forum_desc,a.forum_lock, (SELECT COUNT(*) FROM forums_msg WHERE cat=a.id) AS nbr_msg, (SELECT login FROM members WHERE id=auth LIMIT 1) AS login (SELECT auth FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS auth, (SELECT reply FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS reply, (SELECT date FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS last_date FROM forums AS a WHERE a.forum_cat='1' ORDER BY a.forum_name ASC;
La requête retourne le résultat escompté, mais elle demande 0.65 seconde pour être exécutée, multiplié par 4 pour l'affichage complet du forum, on arrive donc à plus de 2 secondes, ce qui est impensable pour un site avec plusieurs centaines de connectés simultanément.
Il doit bien y avoir une solution pour optimiser les 3 sous-requêtes qui se ressemblent:
(SELECT auth FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS auth, (SELECT reply FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS reply, (SELECT date FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS last_date
Si vous avez une petite idée je vous en serais très reconnaissant ;-)
Merci d'avance et bonnes fêtes de fin d'année à tous :)
Vlaad
