sql >> Base de Datos >  >> RDS >> Mysql

Evite ordenar archivos con INNER JOIN + ORDER BY

Puede ayudar al optimizador de MySQL moviendo todo el trabajo de filtrado a una subconsulta que acceda solo a índices (la manipulación de índices suele ser mucho más rápida que la manipulación de otros datos) y obteniendo el resto de los datos en la consulta más externa:

SELECT posts.post_id,
       posts.post_b_id,
       posts.post_title,
       posts.post_cont,
       posts.thumb,
       posts.post_user,
       boards.board_title_l,
       boards.board_title
FROM   (SELECT post_id
        FROM   posts
               JOIN follow
                 ON posts.post_b_id = follow.board_id
        WHERE  follow.user_id = 1
        ORDER  BY post_id DESC
        LIMIT  10) sq
       JOIN posts
         ON posts.post_id = sq.post_id
       JOIN boards
         ON boards.board_id = posts.post_b_id

Tenga en cuenta que omito ORDER BY posts.post_id DESC de la consulta externa, porque generalmente es más rápido ordenar el resultado final en su código en lugar de ordenar usando una consulta MySQL (MySQL a menudo usa filesort por eso).

PD Puede reemplazar la clave única en el follow tabla con una clave principal.