Mysql
 sql >> база данни >  >> RDS >> Mysql

Избягвайте сортирането на файлове с INNER JOIN + ORDER BY

Можете да помогнете на оптимизатора на MySQL, като преместите цялата работа по филтриране към подзаявка, която има достъп само до индекси (манипулирането на индекси обикновено е много по-бързо от манипулирането на други данни) и извличане на останалата част от данните в най-външната заявка:

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

Имайте предвид, че пропускам ORDER BY posts.post_id DESC от външната заявка, защото обикновено е по-бързо да сортирате крайния резултат във вашия код, вместо да сортирате с MySQL заявка (MySQL често използва filesort за това).

P.S. Можете да замените уникалния ключ в follow таблица с първичен ключ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изтрийте редове от две таблици в една заявка

  2. MySQL :сума от всеки ден

  3. Задайте часовата зона на базата данни на MySQL на GMT

  4. Преброяване на думите в колона на таблицата

  5. Как да разделите текст, разделен със запетая, в съхранената процедура на MySQL