sql >> Database teknologi >  >> RDS >> Mysql

Undgå filsortering med INNER JOIN + BESTIL EFTER

Du kan hjælpe MySQL optimizer ved at flytte alt filtreringsarbejdet til en underforespørgsel, der kun har adgang til indekser (manipulation af indekser er normalt meget hurtigere end at manipulere andre data), og hente resten af ​​dataene i den yderste forespørgsel:

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

Bemærk, at jeg udelader ORDER BY posts.post_id DESC fra den ydre forespørgsel, fordi det normalt er hurtigere at sortere det endelige resultat i din kode i stedet for at sortere ved hjælp af en MySQL-forespørgsel (MySQL bruger ofte filesort for det).

P.S. Du kan erstatte den unikke nøgle i follow tabel med en primær nøgle.




  1. Sådan opretter du MySQL-databaser på delte Linux-hostingplaner

  2. Hvordan får jeg MySQL til at bruge et INDEX til visningsforespørgsel?

  3. Sådan eksporteres en database ved hjælp af kommandolinjen

  4. Hvor mange brugere kan få adgang til support?