2010-10-04 29 views
11

Sự hiểu biết của tôi là khi NOLOCK được sử dụng trong câu lệnh SELECT, nó có thể đọc các hàng không bị ràng buộc/bị bẩn. Nhưng tôi muốn tận dụng lợi thế của gợi ý NOLOCK trên bảng để truy vấn SELECT của tôi sẽ chạy nhanh.SELECT Statement - NOLOCK với SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Bây giờ, NOLOCK trên bảng nhưng cùng với "SET TRANSACTION ISOLATION LEVEL READ COMMITTED" cho tôi lợi thế NOLOCK và truy vấn SELECT nhanh hơn (vì NOLOCK) chỉ với các hàng đã cam kết (vì SET)?

Trả lời

17

có một gợi ý bảng ghi đè các thiết lập mức cô lập, vì vậy bạn vẫn sẽ nhận được bẩn lần đọc

dễ dàng để kiểm tra

đầu tiên hoạt động này

create table bla(id int) 
insert bla values(1) 



begin tran 
select * from bla with (updlock, holdlock) 

chắc chắn không cam kết tran !! mở một cửa sổ khác và chạy số này

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

select * from bla -- with (nolock) 

bạn không nhận lại bất kỳ điều gì.

mở một cửa sổ khác và chạy này ngay bây giờ

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

select * from bla with (nolock) 

như bạn có thể nhìn thấy bạn sẽ lấy lại hàng

BTW, ĐỌC CAM KẾT được mức cô lập mặc định, không cần phải cài đặt nó

Hãy xem Snapshot Isolation sẽ không cung cấp cho bạn dữ liệu bẩn nhưng vẫn không khóa

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