Creé un foro personalizado para mi sitio utilizando MySQL. La página de listado es esencialmente una tabla con las siguientes columnas: Tema, Última actualización y # Respuestas.Optimizar la consulta de MySQL para evitar "Uso de; Uso temporal; Uso de filesort"
mesa El PP tiene las siguientes columnas:
id
name
body
date
topic_id
email
Un tema tiene la topic_id de "0", y respuestas tener la topic_id de su Tema principal.
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;
Hay alrededor de 2.100 artículos en total en esta tabla, y las consultas suelen tardar unos increíbles 6 segundos. Agregué un ÍNDICE a la columna "topic_id", pero eso no ayudó mucho. ¿Hay alguna forma de acelerar esta consulta sin hacer una reestructuración significativa?
EDIT: no del todo funcionando todavía. Parece que no puedo obtener los ejemplos a continuación para que funcionen correctamente.
La 'fecha' de columna en la lista de campos es ambigua ..? – Matt
@Matt: ver la actualización – Quassnoi
@Quassnoi - ¿puedes explicar lo que está pasando? ¿El "UNION ALL" reemplaza "last_reply" con "date" si el tema no tiene respuestas? – Matt