SQL中with nolock 作用說明

2022-02-02 05:21:24 字數 2468 閱讀 9384

例如:

select

count

(userid)

from

employee

with

(nolock)

join

working_group

with

(nolock)

onemployee.userid

=working_group.userid

因為sql server會執行對應的鎖定一致性檢查。 欲改善整體資料庫查詢的效能,請將with (nolock)加在您的select語法中table名稱的後面,雖然(nolock)也可以,但是微軟還是建議大家要加with。

除了簡單的select之外,有join的select語法也是可以使用的。但是delete、insert、update這些需要transaction的指令就不行了…

有些檔案說,加了with (nolock)的sql查詢效率可以增加33%。

加了with (nolock)即告訴sql server,我們的這段select指令無需去考慮目前table的transaction lock狀態,因此效能上會有明顯的提公升,而且資料庫系統的lock現象會有明顯的減少(包含dead lock)。

有一點要特別注意,因為with (nolock)不考慮目前table的transaction lock,因此當有某些資料正處於多個phase交易(例如跨多個table的transaction交易-->如提款系統),with (nolock)會讓目前處理交易process的資料被忽略…

講白話一點,也就是說當使用nolock時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考慮transaction事務資料的實時完整性時,使用with (nolock)就要好好考慮一下。

如果不需考慮transaction,with (nolock)或許是個好用的參考。

注1:with ( < table_hint > )

指定由查詢優化器使用的表掃瞄、一或多個索引,

或由查詢優化器利用此資料表以及為此語句使用鎖定模式。

注2:with (nolock)相當於read uncommitted

最後說下nolock和with(nolock)的幾個小區別:

1:sql05中的同義詞,只支援with(nolock);

2:with(nolock)的寫法非常容易再指定索引。 

跨伺服器查詢語句時 不能用with (nolock) 只能用nolock

同乙個伺服器查詢時 則with (nolock)和nolock都可以用

比如sql code 

select * from [ip].a.dbo.table1 with (nolock) 這樣會提示用錯誤select * from a.dbo.table1 with (nolock) 這樣就可以

例如:

select

count

(userid)

from

employee

with

(nolock)

join

working_group

with

(nolock)

onemployee.userid

=working_group.userid

因為sql server會執行對應的鎖定一致性檢查。 欲改善整體資料庫查詢的效能,請將with (nolock)加在您的select語法中table名稱的後面,雖然(nolock)也可以,但是微軟還是建議大家要加with。

除了簡單的select之外,有join的select語法也是可以使用的。但是delete、insert、update這些需要transaction的指令就不行了…

有些檔案說,加了with (nolock)的sql查詢效率可以增加33%。

加了with (nolock)即告訴sql server,我們的這段select指令無需去考慮目前table的transaction lock狀態,因此效能上會有明顯的提公升,而且資料庫系統的lock現象會有明顯的減少(包含dead lock)。

有一點要特別注意,因為with (nolock)不考慮目前table的transaction lock,因此當有某些資料正處於多個phase交易(例如跨多個table的transaction交易-->如提款系統),with (nolock)會讓目前處理交易process的資料被忽略…

講白話一點,也就是說當使用nolock時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考慮transaction事務資料的實時完整性時,使用with (nolock)就要好好考慮一下。

如果不需考慮transaction,with (nolock)或許是個好用的參考。

注1:with ( < table_hint > )

指定由查詢優化器使用的表掃瞄、一或多個索引,

或由查詢優化器利用此資料表以及為此語句使用鎖定模式。

注2:with (nolock)相當於read uncommitted

《轉》SQL中with nolock 詳解

大家在寫查詢時,為了效能,往往會在表後面加乙個nolock,或者是with nolock 其目的就是查詢是不鎖定表,從而達到提高查詢速度的目的。什麼是併發訪問 同一時間有多個使用者訪問同一資源,併發使用者中如果有使用者對資源做了修改,此時就會對其它使用者產生某些不利的影響,例如 1 髒讀,乙個使用者...

SQL允許髒讀WITH NOLOCK

使用wiht nolock 有利也有弊,所以在決定使用之前,你一定需要了解清楚with nolock 的功能和缺陷,看其是否適合你的業務需求,不要覺得它能提公升效能,稀里糊塗的就使用它。事務未提交回滾 begin tran update dbo.student set ca 6666 where n...

oracle中sql rowcount的作用

起因 新開發個儲存過程,需要當乙個使用者呼叫儲存過程操作一行資料時,另外的使用者不允許呼叫過程操作該資料。解決辦法 先將該記錄的狀態改為處理中,當別的使用者看到為處理中時則跳出過程。此時用到了sql rowcount來判斷是否更新了記錄的狀態 update table t set t.status ...