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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MSSQL WITH (NOLOCK) 脏读

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

缺點:

  1.會產生臟讀

  2.只適用與select查詢語句

優點:

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

  2.可以用于inner join 語句

臟讀: 一個用戶對一個資源做了修改,此時另外一個用戶正好讀取了這條被修改的記錄,然后,第一個用戶放棄修改,數據回到修改之前,這兩個不同的結果就是臟讀。

詳細內容:

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

不過有一點千萬要注意的就是,WITH (NOLOCK)的SQL SELECT有可能會造成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狀態,因此效能上會有明顯的提升,而且數據庫系統的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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。