Lưu ý rằng bạn có thể chỉ định khóa trên cơ sở mỗi bảng.
Tôi thường sử dụng nolock trong các truy vấn SELECT phức tạp, nhưng chỉ cho các bảng tra cứu nhỏ hầu như không bao giờ thay đổi và cho dữ liệu chỉ hiển thị. Bạn biết các bảng liệt kê giá trong nửa năm hiện tại hoặc tra cứu id thành chuỗi, v.v. Nội dung chỉ thay đổi với các bản cập nhật lớn mà sau đó máy chủ thường được khởi động lại thường xuyên.
Điều này đã cải thiện hiệu suất đáng kể, giảm nguy cơ bế tắc trong những thời điểm bận rộn nhất và quan trọng hơn là nó thực sự đáng chú ý trong những thời điểm trường hợp xấu nhất đối với các truy vấn chạm vào nhiều bảng (điều đó là hợp lý, chúng phải lấy ít khóa hơn và những thứ đó thường được sử dụng gần như ở khắp mọi nơi, thường giảm từ 7-8 đến 4 bảng cần được khóa)
Nhưng hãy thật cẩn thận khi thêm nó, đừng vội vàng và đừng làm nó thường xuyên. Nó sẽ không đau khi sử dụng đúng cách, nhưng nó sẽ tổn thương khủng khiếp khi sử dụng không đúng cách.
Đừng sử dụng nó cho những thứ quan trọng cao, những thứ tính toán, v.v., vì nó sẽ không nhất quán, bất cứ điều gì dẫn đến việc viết bài sớm hay muộn.
Một tối ưu hóa khác như vậy là ROWLOCK, chỉ khóa ở cấp độ hàng. Điều này chủ yếu hữu ích khi cập nhật (hoặc xóa) các bảng trong đó các hàng không liên quan đến nhau, chẳng hạn như các bảng mà bạn chỉ đặt các bản ghi nhật ký (và thứ tự chúng được chèn vào không quan trọng). Nếu bạn có một kế hoạch mà ở đâu đó trong phần cuối của giao dịch, một bản ghi nhật ký được ghi vào một số bảng, điều này cũng có thể tăng tốc đáng kể.
Nếu cơ sở dữ liệu của bạn có một tỷ lệ phần trăm ghi tương đối thấp thì nó có thể không đáng. Tôi có tỷ lệ đọc:ghi dưới 2:1.
Một số URL tôi đã lưu khi làm việc này:
http://www.developerfusion.com/article/1688/ sql-server-lock / 4 /