Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hindari filesort dengan INNER JOIN + ORDER BY

Anda dapat membantu pengoptimal MySQL dengan memindahkan semua pekerjaan pemfilteran ke subkueri yang hanya mengakses indeks (memanipulasi indeks biasanya jauh lebih cepat daripada memanipulasi data lain), dan mengambil sisa data di kueri terluar:

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

Perhatikan bahwa saya menghilangkan ORDER BY posts.post_id DESC dari kueri luar, karena biasanya lebih cepat untuk mengurutkan hasil akhir dalam kode Anda daripada mengurutkan menggunakan kueri MySQL (MySQL sering menggunakan filesort untuk itu).

P.S. Anda dapat mengganti kunci unik di follow tabel dengan kunci utama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke server Database (meja kerja mysql)

  2. Prosedur tersimpan di Ruby on Rails

  3. Koneksi database dinamis Codeigniter

  4. MySQL Menyimpan variabel prosedur dari pernyataan SELECT

  5. Bagaimana cara mengatasi kesalahan mysql port 3306 di wamp?