3 回答

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

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

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