NOLOCK
không áp dụng cho phần truy vấn tham chiếu đến bảng được sửa đổi. Trong câu lệnh cập nhật SQL Server U-lock từng hàng một cách ngắn gọn trong khi nó đang được kiểm tra. Đây là một cơ chế tránh bế tắc. Nó ngăn nhiều bản cập nhật cho mỗi S-lock một hàng để đọc và sau đó cố gắng khóa X.
Bạn không thể làm cho khóa chữ U biến mất AFAIK. Nhưng bạn có thể giảm số lượng hàng bị khóa U xuống mức tối thiểu bị loại bỏ bằng cách tự nối:
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
Điều này thêm một chút chi phí nhưng nó cho phép bạn sử dụng NOLOCK
để đọc.
Cân nhắc sử dụng cách ly ảnh chụp nhanh cho các lần đọc. NOLOCK
có một số vấn đề nhất định, chẳng hạn như truy vấn hủy bỏ ngẫu nhiên.