Không, hành vi đó không thể dựa vào. Thứ tự được xác định theo cách người lập kế hoạch truy vấn đã quyết định xây dựng tập kết quả. các truy vấn đơn giản như select * from foo_table
có khả năng được trả lại theo thứ tự chúng được lưu trữ trên đĩa, có thể theo thứ tự khóa chính hoặc thứ tự chúng được tạo hoặc một số thứ tự ngẫu nhiên khác. các truy vấn phức tạp hơn, chẳng hạn như select * from foo where bar < 10
thay vào đó, có thể được trả về theo thứ tự của một cột khác, dựa trên việc đọc chỉ mục hoặc theo thứ tự bảng, để quét bảng. các truy vấn phức tạp hơn nữa, với multipe where
điều kiện, nhóm group by
mệnh đề, union
s, sẽ theo bất kỳ thứ tự nào mà người lập kế hoạch quyết định là tạo ra hiệu quả nhất.
Thứ tự thậm chí có thể thay đổi giữa hai truy vấn giống hệt nhau chỉ vì dữ liệu đã thay đổi giữa các truy vấn đó. mệnh đề "where" có thể được thỏa mãn khi quét chỉ mục trong một truy vấn, nhưng các lần chèn sau có thể làm cho điều kiện đó ít chọn lọc hơn và người lập kế hoạch có thể quyết định thực hiện truy vấn tiếp theo bằng cách sử dụng quét bảng.
Để đặt một điểm tốt hơn vào nó. Hệ thống RDBMS có nhiệm vụ cung cấp cho bạn chính xác những gì bạn đã yêu cầu, càng hiệu quả càng tốt. Hiệu quả đó có thể có nhiều dạng, bao gồm giảm thiểu IO (cả vào đĩa cũng như qua mạng để gửi dữ liệu cho bạn), giảm thiểu CPU và giữ cho kích thước của bộ làm việc của nó nhỏ (sử dụng các phương pháp yêu cầu lưu trữ tạm thời tối thiểu).
không có ORDER BY
điều khoản, bạn sẽ không hỏi chính xác cho một thứ tự cụ thể và do đó RDBMS sẽ cung cấp cho bạn những hàng đó theo một số thứ tự (có thể) tương ứng với một số khía cạnh trùng hợp của truy vấn, dựa trên bất kỳ thuật toán nào mà RDBMS mong đợi tạo ra dữ liệu nhanh nhất.
Nếu bạn quan tâm đến hiệu quả, nhưng không đặt hàng, hãy bỏ qua ORDER BY
mệnh đề. Nếu bạn quan tâm đến đơn đặt hàng nhưng không hiệu quả, hãy sử dụng ORDER BY
mệnh đề.
Vì bạn thực sự quan tâm đến CẢ sử dụng ORDER BY
và sau đó điều chỉnh cẩn thận truy vấn và cơ sở dữ liệu của bạn để nó hoạt động hiệu quả.