1) Có, một lựa chọn với NOLOCK
sẽ hoàn thành nhanh hơn so với một lựa chọn bình thường.
2) Có, lựa chọn với NOLOCK
sẽ cho phép các truy vấn khác đối với bảng được thực hiện hoàn thành nhanh hơn lựa chọn bình thường.
Tại sao điều này?
NOLOCK
thông thường (tùy thuộc vào công cụ DB) có nghĩa là cung cấp dữ liệu cho tôi và tôi không quan tâm trạng thái của nó và không bận tâm giữ nó trong khi bạn đọc từ đó. Đó là tất cả cùng một lúc nhanh hơn, ít tốn nhiều tài nguyên và rất nguy hiểm.
Bạn nên được cảnh báo để không bao giờ thực hiện cập nhật từ hoặc thực hiện bất kỳ hệ thống nào quan trọng hoặc yêu cầu tính chính xác tuyệt đối bằng cách sử dụng dữ liệu bắt nguồn từ số đọc NOLOCK
. Hoàn toàn có thể là dữ liệu này chứa các hàng đã bị xóa trong khi chạy truy vấn hoặc đã bị xóa trong các phiên khác chưa được hoàn thành. Có thể dữ liệu này bao gồm các hàng đã được cập nhật một phần. Có thể dữ liệu này chứa các bản ghi vi phạm ràng buộc khóa ngoại. Có thể dữ liệu này loại trừ các hàng đã được thêm vào bảng nhưng chưa được cam kết.
Bạn thực sự không có cách nào để biết trạng thái của dữ liệu là gì.
Nếu bạn đang cố gắng lấy những thứ như Count Row hoặc dữ liệu tóm tắt khác, một số lỗi có thể chấp nhận được, thì NOLOCK
là một cách hay để tăng hiệu suất cho các truy vấn này và tránh chúng tác động tiêu cực đến hiệu suất cơ sở dữ liệu.
Luôn sử dụng gợi ý NOLOCK
thận trọng và xử lý mọi dữ liệu mà nó trả về đáng ngờ.
Nguồn
2008-10-16 20:43:38
Các câu trả lời [SO] (http://stackoverflow.com/a/12610346/641833) và [DBA] (http://dba.stackexchange.com/a/50029/9210) này rõ ràng hơn một chút về những gì đang thực sự xảy ra. – Trisped