Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Evite classificar arquivos com INNER JOIN + ORDER BY


Você pode ajudar o otimizador do MySQL movendo todo o trabalho de filtragem para uma subconsulta que acessa apenas índices (manipular índices geralmente é muito mais rápido do que manipular outros dados) e buscar o restante dos dados na consulta 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

Observe que omito ORDER BY posts.post_id DESC da consulta externa, porque geralmente é mais rápido classificar o resultado final em seu código em vez de classificar usando uma consulta MySQL (o MySQL geralmente usa filesort por isso).

P.S. Você pode substituir a chave exclusiva no follow tabela com uma chave primária.