Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Unikaj sortowania plików za pomocą INNER JOIN + ORDER BY

Możesz pomóc optymalizatorowi MySQL, przenosząc całą pracę filtrowania do podzapytania, które ma dostęp tylko do indeksów (manipulowanie indeksami jest zwykle znacznie szybsze niż manipulowanie innymi danymi) i pobierając resztę danych w najbardziej zewnętrznym zapytaniu:

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

Zauważ, że pomijam ORDER BY posts.post_id DESC z zapytania zewnętrznego, ponieważ zazwyczaj szybsze jest sortowanie końcowego wyniku w kodzie niż sortowanie za pomocą zapytania MySQL (MySQL często używa filesort za to).

PS Możesz zastąpić unikalny klucz w follow tabela z kluczem podstawowym.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele JOINS tabeli MySQL wymaga połączenia wyników 1 tabeli w jedno pole kolumny

  2. Jaka jest różnica semantyczna między GDZIE a MIEĆ?

  3. Wyszukiwarka Lucene a wyszukiwanie w bazie danych

  4. Oblicz różnicę czasu między dwoma rzędami

  5. Zapytanie o zakres czasu między datami przy użyciu DATETIME mysql