架構師_程序員

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

查看: 251|回復: 1
打印 上一主題 下一主題

[資料] MSSQL WITH (NOLOCK) 臟讀

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2020-4-3 10:06:04 | 只看該作者
缺點:

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之外,有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





上一篇:數據庫主從延遲導致查詢不準確的解決思路
下一篇:解決fiddler無法抓取本地localhost、127.0.0.1網絡請求問題
帖子永久地址: 

架構師_程序員 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與架構師_程序員享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和架構師_程序員的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、架構師_程序員管理員和版主有權不事先通知發貼者而刪除本文

碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
沙發
發表于 2020-4-5 14:21:36 | 只看該作者
碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則

免責聲明:
碼農網所發布的一切軟件、編程資料或者文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。如有侵權請郵件與我們聯系處理。

Mail To:help@itsvse.com

QQ|Archiver|手機版|小黑屋|架構師 ( 魯ICP備14021824號-2 )|網站地圖

GMT+8, 2020-7-12 09:04

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
捕鸟达人老版