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

SELECT SQL_CALC_FOUND_ROWS Truy vấn rất chậm hơn 250000 bản ghi

Có một mô tả hay trong blog này: https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Minh chứng cho thấy rằng có, việc sử dụng SQL_CALC_FOUND_ROWS rất kém hiệu quả khi bạn sử dụng nó trên một bảng lớn.

Thường tốt hơn là chạy hai truy vấn riêng biệt:

/* no need to do the join in this case, because it won't affect the count */
SELECT COUNT(*) 
FROM main_articles 
WHERE `article_type`='2' 

SELECT main_article.* 
FROM main_articles 
LEFT JOIN main_members 
ON article_mem_id=member_id 
WHERE `article_type`='2' 
ORDER BY article_id 
DESC LIMIT 0,20

Nhân tiện, điều này không liên quan đến vấn đề SQL_CALC_FOUND_ROWS, nhưng tôi thắc mắc tại sao bạn lại tham gia vào main_members bàn. Bạn không tìm nạp bất kỳ cột nào từ nó. LEFT JOIN có nghĩa là nó sẽ không hạn chế các hàng. Nếu tôi có thể suy ra mối quan hệ bảng từ tên cột, thì chỉ có thể có một hàng trong main_members cho mỗi hàng trong main_articles , vì vậy phép nối cũng sẽ không làm tăng số hàng. Vì vậy, thực sự không có mục đích để thực hiện việc tham gia này.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cảnh báo # 1264:lỗi ngoài phạm vi trong mysql

  2. Thư viện không được tải:lỗi libmysqlclient.16.dylib khi cố gắng chạy 'máy chủ rails' trên OS X 10.6 với đá quý mysql2

  3. Tương đương 'LIKE' trên Laravel-5 (Hùng biện)

  4. PostgreSQL so với MySQL

  5. SUBDATE () so với DATE_SUB () trong MySQL:Sự khác biệt là gì?