Mysql
 sql >> Base de données >  >> RDS >> Mysql

Évitez le tri de fichiers avec INNER JOIN + ORDER BY

Vous pouvez aider l'optimiseur MySQL en déplaçant tout le travail de filtrage vers une sous-requête qui n'accède qu'aux index (la manipulation des index est généralement beaucoup plus rapide que la manipulation d'autres données) et en récupérant le reste des données dans la requête la plus externe :

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

Notez que j'omets ORDER BY posts.post_id DESC à partir de la requête externe, car il est généralement plus rapide de trier le résultat final dans votre code plutôt que de trier à l'aide d'une requête MySQL (MySQL utilise souvent filesort pour ça).

PS Vous pouvez remplacer la clé unique dans le follow table avec une clé primaire.