sql >> Databáze >  >> RDS >> Mysql

Vyhněte se řazení souborů pomocí INNER JOIN + ORDER BY

Optimalizátoru MySQL můžete pomoci tím, že veškerou práci s filtrováním přesunete na poddotaz, který přistupuje pouze k indexům (manipulace s indexy je obvykle mnohem rychlejší než manipulace s jinými daty), a načtením zbytku dat v nejvzdálenějším dotazu:

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

Všimněte si, že jsem vynechal ORDER BY posts.post_id DESC z vnějšího dotazu, protože je obvykle rychlejší seřadit konečný výsledek v kódu než řazení pomocí dotazu MySQL (MySQL často používá filesort za to).

P.S. Jedinečný klíč můžete nahradit follow tabulka s primárním klíčem.




  1. Víceúrovňové menu řízené databáze PHP

  2. problém podobný mysql při částečné shodě

  3. Sloupec přejmenování MySQL

  4. SQL pohledy