Tôi khá chắc chắn rằng bạn cần chỉ định NOLOCK
cho mỗi JOIN
trong truy vấn. Nhưng kinh nghiệm của tôi chỉ giới hạn ở SQL Server 2005.
Khi tôi tra cứu MSDN chỉ để xác nhận, tôi không thể tìm thấy bất cứ điều gì rõ ràng. Các tuyên bố dưới đây dường như làm tôi nghĩ rằng, trong năm 2008, hai tuyên bố của bạn ở trên là tương đương nhau mặc dù trong năm 2005 thì không phải vậy:
[Máy chủ SQL 2008 R2]
Tất cả các gợi ý khóa được truyền đến tất cả các bảng và dạng xem được truy cập bởi gói truy vấn , bao gồm các bảng và dạng xem được tham chiếu trong dạng xem. Ngoài ra, SQL Server thực hiện kiểm tra tính nhất quán khóa tương ứng.
[Máy chủ SQL 2005]
Trong SQL Server 2005, tất cả các gợi ý khóa được truyền đến tất cả các bảng và dạng xem được tham chiếu trong dạng xem. Ngoài ra, SQL Server thực hiện kiểm tra tính nhất quán khóa tương ứng.
Ngoài ra, điểm cần lưu ý - và điều này áp dụng cho cả năm 2005 và 2008:
Gợi ý bảng được bỏ qua nếu bảng không được truy cập bởi kế hoạch truy vấn. Điều này có thể được gây ra bởi trình tối ưu hóa chọn hoàn toàn không truy cập vào bảng hoặc do một chế độ xem được lập chỉ mục được truy cập thay thế. Trong trường hợp sau, việc truy cập chế độ xem được lập chỉ mục có thể được ngăn chặn bằng cách sử dụng OPTION (EXPAND VIEWS)
gợi ý truy vấn.