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

MySQL:Tại sao ID thứ 5 trong mệnh đề IN lại thay đổi mạnh mẽ kế hoạch truy vấn?

Như bạn đã trình bày, MySQL có hai kế hoạch truy vấn thay thế cho các truy vấn có ORDER BY ... LIMIT n :

  1. Đọc tất cả các hàng đủ điều kiện, sắp xếp chúng và chọn n hàng trên cùng.
  2. Đọc các hàng theo thứ tự đã sắp xếp và dừng lại khi n hàng đủ điều kiện đã được tìm thấy.

Để quyết định tùy chọn nào tốt hơn, trình tối ưu hóa cần ước tính hiệu quả lọc của điều kiện WHERE của bạn. Điều này không dễ hiểu, đặc biệt là đối với các cột không được lập chỉ mục hoặc đối với các cột có các giá trị tương quan với nhau. Trong trường hợp của bạn, người ta có thể phải đọc nhiều bảng hơn theo thứ tự được sắp xếp để tìm 25 hàng đủ điều kiện đầu tiên so với những gì trình tối ưu hóa mong đợi.

Đã có một số cải tiến về cách xử lý LIMIT truy vấn, cả trong các bản phát hành sau của 5.6 (bạn đang chạy trên bản phát hành trước GA!) Và trong các bản phát hành mới hơn (5.7, 8.0). Tôi khuyên bạn nên thử nâng cấp lên bản phát hành sau và xem liệu đây có còn là sự cố không.

Nói chung, nếu bạn muốn hiểu các quyết định của người lập kế hoạch truy vấn, bạn nên xem dấu vết của trình tối ưu hóa cho truy vấn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chuyển đổi truy vấn MySQL sang cú pháp Codeigniter

  2. Truy vấn SQL để trích xuất tất cả các bài đăng WordPress với các danh mục

  3. Chấm dứt các kết nối mysql nhàn rỗi

  4. JpaSpecificationExecutor JOIN + ORDER BY trong Đặc tả

  5. Làm thế nào để di chuyển các cột trong một bảng MySQL?