La siguiente consulta es relativamente lento (0,7 segundos con ~ 6k filas)MySQL grupo lenta/ordenado por
SELECT items.*, COUNT(transactions.ID)
FROM items
INNER JOIN users ON (items.USER = users.ID)
LEFT JOIN transactions ON (items.id = transactions.item)
WHERE items.ACTIVE = 1
AND items.DELETED_AT IS NULL
GROUP BY items.ID
ORDER BY items.DATE DESC
LIMIT 20
Pero acelera drásticamente cuando es ordenado por items.ID DESC en lugar de items.DATE. Las transacciones se unen a una tabla grande (~ 250k filas) y es uno a muchos. La columna de fecha tiene un índice.
¿Hay alguna manera de mejorar genéricamente el rendimiento de ORDER BY?
EDITAR: índices en items.user, transactions.item y items.date. Los elementos tienen 49 columnas, usuarios 76 y transacciones 17.
¿Puede proporcionar los esquemas y especialmente los índices de las tres tablas? – TetonSig
Lo único que puedo pensar es primero seleccionar elementos filtrados por su cláusula WHERE y ordenados por fecha en una subconsulta, (o en una vista, si MySQL no admite ORDER BY en subconsultas,) y luego en una consulta adjunta do tus uniones. (No estoy escribiendo esto como una respuesta porque SO desalienta las respuestas especulativas.) –
¿Ha intentado incluir 'items.DATE' en' GROUP BY' (en la primera posición también)? –