日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MSSQL WITH (NOLOCK) 脏读

發(fā)布時(shí)間:2024/9/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MSSQL WITH (NOLOCK) 脏读 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

缺點(diǎn):

  1.會(huì)產(chǎn)生臟讀

  2.只適用與select查詢語句

優(yōu)點(diǎn):

  1.有些文件說,加了WITH (NOLOCK)的SQL查詢效率可以增加33%。

  2.可以用于inner join 語句

臟讀: 一個(gè)用戶對(duì)一個(gè)資源做了修改,此時(shí)另外一個(gè)用戶正好讀取了這條被修改的記錄,然后,第一個(gè)用戶放棄修改,數(shù)據(jù)回到修改之前,這兩個(gè)不同的結(jié)果就是臟讀。

詳細(xì)內(nèi)容:

  要提升SQL的查詢效能,一般來說大家會(huì)以建立索引(index)為第一考慮。其實(shí)除了index的建立之外,當(dāng)我們在下SQL Command時(shí),在語法中加一段WITH (NOLOCK)可以改善在線大量查詢的環(huán)境中數(shù)據(jù)集被LOCK的現(xiàn)象藉此改善查詢的效能。

不過有一點(diǎn)千萬要注意的就是,WITH (NOLOCK)的SQL SELECT有可能會(huì)造成Dirty Read(臟讀)。

例如:

SELECT?COUNT(UserID)?
FROM?EMPLOYEE?WITH?(NOLOCK)?
JOIN?WORKING_GROUP?WITH?(NOLOCK)?
ON?EMPLOYEE.UserID?=?WORKING_GROUP.UserID

除了簡單的SELECT之外,有JOIN的SELECT語法也是可以使用的。但是DELETE、INSERT、UPDATE這些需要transaction的指令就不行了…


有些文件說,加了WITH (NOLOCK)的SQL查詢效率可以增加33%。
加了WITH (NOLOCK)即告訴SQL Server,我們的這段SELECT指令無需去考慮目前table的transaction lock狀態(tài),因此效能上會(huì)有明顯的提升,而且數(shù)據(jù)庫系統(tǒng)的Lock現(xiàn)象會(huì)有明顯的減少(包含Dead Lock)。

有 一點(diǎn)要特別注意,因?yàn)閃ITH (NOLOCK)不考慮目前table的transaction lock,因此當(dāng)有某些資料正處于多個(gè)phase交易(例如跨多個(gè)table的transaction交易-->如提款系統(tǒng)),WITH (NOLOCK)會(huì)讓目前處理交易process的數(shù)據(jù)被忽略…

講白話一點(diǎn),也就是說當(dāng)使用NoLock時(shí),它允許閱讀那些已經(jīng)修改但是還沒有交易完成的數(shù)據(jù)。因此如果有需要考慮transaction事務(wù)數(shù)據(jù)的實(shí)時(shí)完整性時(shí),使用WITH (NOLOCK)就要好好考慮一下。

如果不需考慮transaction,WITH (NOLOCK)或許是個(gè)好用的參考。

注1:WITH ( < table_hint > )
指定由查詢優(yōu)化器使用的表掃描、一或多個(gè)索引,
或由查詢優(yōu)化器利用此數(shù)據(jù)表以及為此語句使用鎖定模式。

注2:WITH (NOLOCK)相當(dāng)于READ UNCOMMITTED

總結(jié)

以上是生活随笔為你收集整理的MSSQL WITH (NOLOCK) 脏读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。