(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 có 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.