2012-02-02 12 views
7

Tôi nhận được các hàng theo thứ tự khác nhau khi tôi sử dụngTại sao "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" trả về các hàng theo thứ tự khác nhau?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

trong quy trình được lưu trữ của tôi.

Dưới đây là truy vấn được xác định trong quy trình được lưu trữ.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 

SELECT CaseRateDetailId,AmtPerWeek 
FROM CaseRateDetails 
WHERE CaseRateInfoId = @CaseRateInfoId 

Nó trả AmtPerWeek như thế này:

10000,15000,5000,20000,25000,.. 

Khi tôi chạy cùng một truy vấn mà không sử dụng

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

tuyên bố nó sẽ trả về các hàng theo thứ tự đúng nghĩa 5000,10000,15000,20000,25000,....

Tôi có thể sử dụng thứ tự theo mệnh đề AmtPerWeek trong truy vấn trên nhưng tôi muốn biết lý do tại sao nó hoạt động như thế này? Tại sao nó thay đổi thứ tự của các hàng?

+8

Không có ** thứ tự ** chính xác nào nếu không có đơn hàng theo mệnh đề. –

+3

Không có 'ORDER BY' -> không có lệnh xác định hoặc được bảo đảm hoặc ngầm định - nếu bạn cần một đơn đặt hàng, bạn cần phải có 'ORDER BY' - ** luôn. ** –

+4

+1 cho" nhưng tôi muốn biết lý do tại sao nó hoạt động như thế này. " –

Trả lời

10

Dưới NOLOCK hoặc TABLOCK bạn có thể nhận được allocation ordered scan đọc các trang theo thứ tự tệp thay vì theo cấp độ lá của chỉ mục.

Nó không hiển thị trong kế hoạch thực thi cho dù nó có sử dụng phương pháp này hay không. Nếu không có ORDER BY, không có đơn đặt hàng nào được đảm bảo.

+0

Điều đó thật thú vị - bạn nói đúng là nó không xuất hiện trong kế hoạch. Đã xóa câu trả lời của tôi vì bạn đã chứng minh là sai. – Ben

+1

@Ben - Khi kế hoạch hiển thị quét chỉ mục với 'Ordered: False', công cụ quan hệ cho biết nó không quan tâm thứ tự các hàng được trả về, có nghĩa là công cụ lưu trữ sẽ coi đây là tùy chọn thích hợp cho các chỉ mục> 64 trang và nơi dữ liệu không thể thay đổi (khóa tab) hoặc mức cách ly sao cho nó thích tốc độ hơn với bất kỳ sự đảm bảo nhất quán nào. Phân bổ lệnh được sắp xếp có nhiều khả năng bỏ sót các hàng hoặc đọc các hàng hai lần trong các điều kiện sửa đổi dữ liệu đồng thời so với việc quét chỉ mục theo thứ tự. –

+0

Woah, bắt thú vị! – Alexandre