J'ai créé un forum personnalisé pour mon site en utilisant MySQL. La page de liste est essentiellement un tableau avec les colonnes suivantes: Rubrique, Dernière mise à jour et # Réponses.Optimisation de la requête MySQL pour éviter "Using where; Utilisation temporaire; Utilisation de filesort"
Le tableau DB a les colonnes suivantes:
id
name
body
date
topic_id
email
Un sujet a le topic_id de "0", et réponses ont le topic_id de leur sujet parent.
SELECT SQL_CALC_FOUND_ROWS
t.id, t.name, MAX(COALESCE(r.date, t.date)) AS date, COUNT(r.id) AS replies
FROM
wp_pod_tbl_forum t
LEFT OUTER JOIN
wp_pod_tbl_forum r ON (r.topic_id = t.id)
WHERE
t.topic_id = 0
GROUP BY
t.id
ORDER BY
date DESC LIMIT 0,20;
Il ya environ 2 100 éléments au total dans ce tableau, et les requêtes prennent généralement 6 secondes. J'ai ajouté un INDEX à la colonne "topic_id", mais cela n'a pas aidé beaucoup. Existe-t-il des moyens d'accélérer cette requête sans procéder à une restructuration importante?
EDIT: ne fonctionne pas encore. Je n'arrive pas à obtenir les exemples ci-dessous pour fonctionner correctement.
La colonne 'date' dans la liste des champs est ambiguë. – Matt
@Matt: voir mise à jour – Quassnoi
@Quassnoi - pouvez-vous expliquer ce qui se passe? Est-ce que "UNION ALL" remplace "last_reply" par "date" si le sujet n'a pas de réponse? – Matt