Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vermeiden Sie Dateisortierung mit INNER JOIN + ORDER BY

Sie können dem MySQL-Optimierer helfen, indem Sie die gesamte Filterarbeit in eine Unterabfrage verschieben, die nur auf Indizes zugreift (das Manipulieren von Indizes ist normalerweise viel schneller als das Manipulieren anderer Daten), und den Rest der Daten in der äußersten Abfrage abrufen:

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

Beachten Sie, dass ich ORDER BY posts.post_id DESC weglasse von der äußeren Abfrage, da es normalerweise schneller ist, das Endergebnis in Ihrem Code zu sortieren, als mit einer MySQL-Abfrage zu sortieren (MySQL verwendet häufig filesort dafür).

P.S. Sie können den eindeutigen Schlüssel im follow ersetzen Tabelle mit einem Primärschlüssel.