NOLOCK使用情境

若Table會頻繁操作(INSERT、UPDATE、DELETE)即可考慮使用NOLOCK,但亦要考慮 Dirty Read的問題。

  • 不經常修改的Table,可以減少Lock住Table的時間來加快查詢速度。
  • 數據量極大的Table,可以透過透落 NOLOCK來提升查詢效率,但需要注意數據的完整性
  • 允許Dirty Read 的業務邏輯。
  • NOLOCK允許查詢已修改但是還沒結束Trasaction的數據;因此若要考慮到Trasaction的實時完整性時時不建議使用。

NOLOCK、(NOLOCK)、WITH(NOLOCK) 差異

SELECT * FROM A NOLOCK; 
SELECT * FROM A (NOLOCK); 
SELECT * FROM A WITH(NOLOCK); 
  1. 上述無括號的NOLOCK將不起作用需要特別注意。
  2. (NOLOCK)、WITH(NOLOCK)用法大致相同,但是 SQL Server 2008以後的版本建議使用 WITH(NOLOCK),並表示(NOLOCK)用法已過時。

參考資源 : https://zhuanlan.zhihu.com/p/420826075