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

mysql:làm cách nào để lưu ORDER BY sau LEFT JOIN mà không cần sắp xếp lại?

(Giải thích việc mất ORDER BY )

Về cơ bản, tiêu chuẩn SQL nói rằng một truy vấn con là một tập hợp các hàng không có thứ tự. Điều này ngụ ý rằng Trình tối ưu hóa có thể bỏ qua ORDER BY trong bảng 'dẫn xuất':FROM ( SELECT ... ORDER BY ) . Trong các phiên bản "gần đây" của MySQL và MariaDB, ORDER BYs như vậy đang bị loại bỏ. Có những trường hợp khác mà ORDER BY bị bỏ qua.

Trong một số tình huống (không chắc chắn về tình huống này), thêm LIMIT 99999999 (số lớn) sau ORDER BY đánh lừa Trình tối ưu hóa thực hiện ORDER BY . Tuy nhiên, bạn vẫn có thể bỏ qua "đơn đặt hàng" sau đó.

Một quy tắc chung cho MySQL:Tránh truy vấn con. (Có những trường hợp truy vấn phụ nhanh hơn, nhưng không phải của bạn.)

Một quy tắc mạnh mẽ:Bạn phải ORDER BY ở ngoài cùng nếu bạn muốn sắp xếp kết quả.

Nếu bạn đã thêm LIMIT 3 vào bảng dẫn xuất trong truy vấn đầu tiên của bạn, bạn sẽ chỉ nhận được CHARLES, DAVID, JAMES, nhưng không nhất thiết phải theo thứ tự đó . Đó là, bạn sẽ cần hai ORDER BY - một trong bảng dẫn xuất, một ở cuối.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa - Tôi không thể chỉ định bảng mục tiêu?

  2. Làm cách nào để biết có bao nhiêu kết nối MySQL đang mở?

  3. Cách đổi tên hai bảng trong một hoạt động nguyên tử trong MySQL

  4. Tính giá trị phần trăm bằng MySQL

  5. Cơ sở dữ liệu so sánh MySQL