Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

NOLOCK (gợi ý Máy chủ Sql) có phải là phương pháp không tốt không?

Trước khi làm việc trên Stack Overflow, tôi đã chống lại NOLOCK về nguyên tắc mà bạn có thể thực hiện SELECT với NOLOCK và nhận lại kết quả với dữ liệu có thể đã lỗi thời hoặc không nhất quán. Một yếu tố cần suy nghĩ là có bao nhiêu bản ghi có thể được chèn / cập nhật cùng lúc một quá trình khác có thể đang chọn dữ liệu từ cùng một bảng. Nếu điều này xảy ra nhiều thì có khả năng cao xảy ra deadlock trừ khi bạn sử dụng chế độ cơ sở dữ liệu như READ COMMITED SNAPSHOT .

Kể từ đó, tôi đã thay đổi quan điểm của mình về việc sử dụng NOLOCK sau khi chứng kiến ​​cách nó có thể cải thiện SELECT hiệu suất cũng như loại bỏ các bế tắc trên SQL Server được tải lớn. Đôi khi bạn có thể không quan tâm rằng dữ liệu của bạn không được cam kết chính xác 100% và bạn cần kết quả nhanh chóng trở lại ngay cả khi chúng có thể đã lỗi thời.

Hãy tự hỏi bản thân khi nghĩ đến việc sử dụng NOLOCK :

Truy vấn của tôi có bao gồm một bảng có số lượng INSERT cao không / UPDATE và tôi có quan tâm nếu dữ liệu trả về từ một truy vấn có thể bị thiếu những thay đổi này tại một thời điểm nhất định không?

Nếu câu trả lời là không, hãy sử dụng NOLOCK để cải thiện hiệu suất.

Tôi vừa thực hiện một tìm kiếm nhanh cho NOLOCK từ khóa trong cơ sở mã cho Stack Overflow và tìm thấy 138 trường hợp, vì vậy chúng tôi sử dụng nó ở một số nơi.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để chọn ngày giữa hai ngày

  2. Làm cách nào để CHÈN dữ liệu vào hai bảng đồng thời trong SQL Server?

  3. cơ sở dữ liệu đính kèm chỉ đọc

  4. T-SQL:Đối lập với nối chuỗi - cách tách chuỗi thành nhiều bản ghi

  5. Định nghĩa báo cáo SSRS mới hơn Máy chủ