3 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
1)是,帶有的選擇NOLOCK
將比正常選擇更快地完成。
2)是,帶有的選擇NOLOCK
將允許對受影響的表進行其他查詢比正常選擇更快地完成。
為什么會這樣呢?
NOLOCK
通常(取決于您的數(shù)據(jù)庫引擎)意味著將您的數(shù)據(jù)提供給我,我不在乎數(shù)據(jù)處于什么狀態(tài),并且在您讀取數(shù)據(jù)時也不會費心保持數(shù)據(jù)狀態(tài)。它的速度更快,資源占用更少,非常危險。
應該警告您不要對系統(tǒng)進行任何重要更新或執(zhí)行任何對系統(tǒng)至關重要的事情,或者在使用NOLOCK
讀取數(shù)據(jù)時要求絕對正確的地方。絕對有可能該數(shù)據(jù)包含在查詢運行期間已刪除的行或在尚未完成的其他會話中已刪除的行。此數(shù)據(jù)可能包含已部分更新的行。此數(shù)據(jù)可能包含違反外鍵約束的記錄。此數(shù)據(jù)可能會排除已添加到表中但尚未提交的行。
您真的沒有辦法知道數(shù)據(jù)的狀態(tài)。
如果您要獲取諸如行計數(shù)或其他匯總數(shù)據(jù)之類的可接受誤差范圍的內(nèi)容,那么這NOLOCK
是提高這些查詢的性能并避免對數(shù)據(jù)庫性能產(chǎn)生負面影響的一種好方法。
始終NOLOCK
謹慎使用提示,并處理可疑返回的任何數(shù)據(jù)。

TA貢獻1776條經(jīng)驗 獲得超12個贊
由于缺少共享鎖,NOLOCK使大多數(shù)SELECT語句更快。同樣,缺少鎖的發(fā)行意味著您的SELECT不會妨礙編寫者。
NOLOCK在功能上等效于READ UNCOMMITTED的隔離級別。主要區(qū)別在于,可以選擇在某些表上使用NOLOCK,但不能在其他表上使用。如果計劃在復雜查詢中的所有表上使用NOLOCK,則使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED會更容易,因為您不必將提示應用于每個表。
這是有關您可以使用的所有隔離級別的信息,以及表提示。

TA貢獻1820條經(jīng)驗 獲得超9個贊
如果一次查詢多次運行,答案是肯定的,因為每個事務都不需要等待其他事務完成。但是,如果查詢單獨運行一次,則答案為“否”。
是的。謹慎使用WITH(NOLOCK)很有可能會整體上加快數(shù)據(jù)庫的速度。這意味著其他事務不必等待此SELECT語句完成,但是另一方面,其他事務將減慢速度,因為它們現(xiàn)在與新事務共享其處理時間。
注意僅WITH (NOLOCK)
在具有聚集索引的表上的SELECT語句中使用。
WITH(NOLOCK)通常被用作加快數(shù)據(jù)庫讀取事務速度的一種神奇方法。
結果集可以包含尚未提交的行,這些行通常在以后回滾。
如果將WITH(NOLOCK)應用于具有非聚集索引的表,則在將行數(shù)據(jù)流式傳輸?shù)浇Y果表時,其他事務可以更改行索引。這意味著結果集可能缺少行或多次顯示同一行。
READ COMMITTED(讀取已提交)增加了一個額外的問題,即數(shù)據(jù)在單個列中損壞,多個用戶同時更改了同一單元格。
- 3 回答
- 0 關注
- 639 瀏覽
添加回答
舉報