Nó không phải lúc nào cũng xấu.
Tất nhiên, nó cho phép bạn đọc các giá trị không được cam kết (có thể được khôi phục và do đó không bao giờ tồn tại một cách hợp lý) cũng như cho phép các hiện tượng như đọc các giá trị nhiều lần hoặc hoàn toàn không.
Các mức cô lập duy nhất đảm bảo rằng bạn sẽ không gặp phải bất kỳ sự bất thường nào như vậy là tuần tự hóa / ảnh chụp nhanh. Có thể bỏ qua các giá trị đọc lặp lại nếu một hàng được di chuyển (do cập nhật khóa) trước khi quét đến hàng này, các giá trị cam kết đã đọc có thể được đọc hai lần nếu cập nhật khóa khiến hàng đọc trước đó di chuyển về phía trước.
nolock
Tuy nhiên, những vấn đề này có nhiều khả năng phát sinh hơn bởi vì theo mặc định, ở mức cô lập này, nó sẽ sử dụng quét theo thứ tự phân bổ khi ước tính có hơn 64 trang được đọc . Cũng như danh mục các vấn đề phát sinh khi các hàng di chuyển giữa các trang do cập nhật khóa chỉ mục, các lần quét phân bổ này cũng dễ bị ảnh hưởng bởi các phân tách trang (trong đó các hàng có thể bị bỏ lỡ nếu trang mới được phân bổ sớm hơn trong tệp so với điểm đã quét hoặc đọc hai lần nếu một trang đã quét được chia thành một trang sau trong tệp).
Ít nhất là đối với các truy vấn đơn giản (bảng đơn), có thể không khuyến khích việc sử dụng các lần quét này và có được một lần quét theo thứ tự nolock
bằng cách chỉ cần thêm một ORDER BY index_key
truy vấn để thuộc Ordered
tính của IndexScan
là true
.
Nhưng nếu ứng dụng báo cáo của bạn không cần số liệu hoàn toàn chính xác và có thể chấp nhận xác suất lớn hơn về sự không nhất quán đó thì có thể chấp nhận được.
Nhưng chắc chắn bạn không nên chọn nó trên tất cả các truy vấn với hy vọng đó là nút "turbo" kỳ diệu. Cũng như xác suất gặp phải kết quả dị thường cao hơn ở mức cô lập đó hoặc không có kết quả nào cả (lỗi "Không thể tiếp tục quét với NOLOCK do di chuyển dữ liệu") thậm chí có trường hợp hiệu suất nolock
có thể tệ hơn nhiều .