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);
- 上述無括號的NOLOCK將不起作用需要特別注意。
- (NOLOCK)、WITH(NOLOCK)用法大致相同,但是 SQL Server 2008以後的版本建議使用 WITH(NOLOCK),並表示(NOLOCK)用法已過時。