2011-12-23 26 views
5

Tôi có một bảng có chỉ mục nhóm PK cũng như các chỉ mục khác trên đó, cả duy nhất và không độc đáo. Nếu tôi phát hành (chính xác):Sắp xếp thứ tự các kết quả cho Chọn KHÔNG CÓ ĐẶT HÀNG hoặc ĐẶT HÀNG theo Điều

SELECT * FROM table_name 

hoặc

SELECT col1, col2 FROM table_name 

theo thứ tự những gì các hàng sẽ được trả lại?

Đây là câu hỏi đầu tiên trong bản câu hỏi phỏng vấn mà khách hàng đã gửi cho chúng tôi. Dưới đây là hướng dẫn:

Nếu câu trả lời cho câu hỏi này không chính xác, hãy chấm dứt cuộc phỏng vấn ngay lập tức! Cá nhân, bất kể khả năng được tuyên bố của họ không hiểu các hệ thống quản lý cơ sở dữ liệu quan hệ dựa trên SQL. Đây là logic SQL-101 trong 25 năm qua. Câu trả lời đúng là: "chưa biết/ngẫu nhiên/chưa được xác định bởi vì không có mệnh đề ORDER BY nào được chỉ định như là một phần của truy vấn".

Tôi bằng cách nào đó không tin rằng điều này thực sự chính xác. Tất cả các bình luận đều được chào đón.

Cảm ơn,

Raj

Trả lời

8

Thậm chí nếu một bảng có một khóa chính/clustered index, bạn không thể chắc chắn về thứ tự của hàng. Mặc dù trong kế hoạch thực hiện sẽ có quét chỉ mục/heap ở cuối, nếu truy vấn được thực hiện song song trên nhiều lõi, tập dữ liệu kết quả sẽ không được sắp xếp do bước kế hoạch hợp nhất luồng song song.

Bạn có thể sẽ không thấy trên cơ sở dữ liệu nhỏ, nhưng hãy thử tạo một tệp có nhiều tệp trên ổ cứng riêng và chạy truy vấn đơn giản trên máy đa lõi. Nhiều khả năng bạn sẽ nhận được kết quả "được sắp xếp từng phần" theo ID - nghĩa là sẽ có các khối nơi các hàng được sắp xếp, nhưng các khối sẽ được truy lục theo thứ tự bán ngẫu nhiên.

+1

+1 Ngoài ra, bạn có thể nhận được quét phân bổ theo thứ tự trong một số điều kiện hoặc SQL Server có thể sử dụng tính năng quét quét tiên tiến/merry-go-round. [Xem thêm câu trả lời này] (http://stackoverflow.com/questions/7116004/guarantee-order-of-table-valued-function-results/7117186#7117186) –

5

Hướng dẫn nói với SQL ở mức khái niệm, tại đó kết quả của truy vấn là mối quan hệ và mối quan hệ không bị sắp xếp. Chuyển từ khái niệm sang thực tế, lý do không có thứ tự ngầm định được định nghĩa trong tiêu chuẩn SQL là vì vậy RDBMS được tự do trả về thứ tự nào hiệu quả nhất cho việc thực hiện chúng.

Các vấn đề liên quan