Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tránh sắp xếp tệp bằng INNER JOIN + ORDER BY

Bạn có thể trợ giúp trình tối ưu hóa MySQL bằng cách chuyển tất cả công việc lọc sang một truy vấn con chỉ truy cập các chỉ mục (thao tác với các chỉ mục thường nhanh hơn nhiều so với thao tác với dữ liệu khác) và tìm nạp phần còn lại của dữ liệu trong truy vấn ngoài cùng:

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

Lưu ý rằng tôi bỏ qua ORDER BY posts.post_id DESC từ truy vấn bên ngoài, bởi vì việc sắp xếp kết quả cuối cùng trong mã của bạn thường nhanh hơn so với sắp xếp bằng cách sử dụng truy vấn MySQL (MySQL thường sử dụng filesort cho điều đó).

P.S. Bạn có thể thay thế khóa duy nhất trong follow bảng có khóa chính.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một bảng tạm thời bền bỉ?

  2. Chọn hàng 'tiếp theo' đưa ra các tiêu chí cụ thể trong MySQL

  3. Bật mật khẩu và xác thực unix_socket cho người dùng gốc MariaDB?

  4. Informix tương đương với BẢNG TẠO HIỂN THỊ CỦA mysql

  5. MySQL SELECT vài ngày qua?