¿Cómo evitar el "uso temporal" en consultas de muchos a muchos?

Esta consulta es muy simple, todo lo que quiero hacer es obtener todos los artículos en una categoría determinada ordenados porlast_updated campo:

SELECT
    `articles`.*
FROM
    `articles`,
    `articles_to_categories`
WHERE
        `articles`.`id` = `articles_to_categories`.`article_id`
        AND `articles_to_categories`.`category_id` = 1
ORDER BY `articles`.`last_updated` DESC
LIMIT 0, 20;

Pero corre muy lento. Esto es lo que dijo EXPLICAR:

select_type  table                   type     possible_keys           key         key_len  ref                                rows  Extra
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SIMPLE       articles_to_categories  ref      article_id,category_id  article_id  5        const                              5016  Using where; Using temporary; Using filesort
SIMPLE       articles                eq_ref   PRIMARY                 PRIMARY     4        articles_to_categories.article_id  1

Hay una manera de reescribir esta consulta o agregar lógica adicional a mis scripts PHP para evitarUsing temporary; Using filesort y acelerar la cosa?

La estructura de la mesa:

*articles*
id | title | content | last_updated

*articles_to_categories*
article_id | category_id

ACTUALIZA

Yo tengolast_updated indexado. Supongo que mi situación se explica en d ocumentation:

En algunos casos, MySQL no puede usar índices para resolver ORDER BY, aunque todavía usa índices para encontrar las filas que coinciden con la cláusula WHERE. Estos casos incluyen lo siguiente:

La clave utilizada para recuperar las filas no es la misma que la utilizada en ORDER BY: SELECT * FROM t1 WHERE key2 = constante ORDER BY key1;

Usted está uniendo muchas tablas, y las columnas en ORDER BY no son todas de la primera tabla no constante que se utiliza para recuperar filas. (Esta es la primera tabla en la salida EXPLAIN que no tiene un tipo de unión constante).

pero todavía no tengo idea de cómo solucionar esto.

Respuestas a la pregunta(4)

Su respuesta a la pregunta