使用「SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED」和NOLOCK之間有什麼區別?這個比那個好嗎?NOLOCK與事務隔離級別
回答
它們是相同的東西,只是作用域不同。 NOLOCK放置在每個桌子的基礎上,並且可以將SET Transaction...
作爲塊放置。
感謝您的確認! – Jason 2009-06-19 15:48:54
NOLOCK是查詢提示,因此僅適用於specifc表中被指定它的查詢中。
設置事務隔離級別適用於在當前連接內執行的所有代碼,或者直到它被明確修改。
爲了澄清,在功能上工作isoloation水平是其上覆蓋可能並不相同但是範圍。
見that answer從幾個小時前,這個問題SQL Server SELECT statements causing blocking。
報價Remus Rusanu:
SELECT可以阻止更新。正確設計的數據模型和查詢只會造成最小的阻塞,而不是問題。 「常用」WITH NOLOCK提示幾乎總是錯誤的答案。正確的答案是調整您的查詢,以便它不掃描巨大的表。
如果查詢不可執行,那麼您應該首先考慮SNAPSHOT ISOLATION級別,其次您應該考慮使用DATABASE SNAPSHOTS並且最後一個選項應該是DIRTY READS(並且最好更改隔離級別而不是使用NOLOCK HINT)。請注意,如名稱明確指出的那樣,髒讀將返回不一致的數據(例如,您的總表可能不平衡)。
其他的答案可以幫助你。
它們具有相同的效果,只有一個用作鎖提示(NOLOCK),另一個被用於連接範圍。
要小心這些 - 髒讀取可能是一個非常糟糕的事情取決於您的應用程序。讀同一記錄兩次或因缺少運動頁的記錄可以是一個非常令人困惑的事情給用戶...
- 1. 與LINQ到NOLOCK NOLOCK沒有設置事務隔離級別
- 2. WITH(NOLOCK)與SET事務隔離級別未提交讀
- 3. SET事務隔離級別
- 4. EJB事務隔離級別
- 5. MySQL事務隔離級別
- 6. PetaPoco事務隔離級別
- 7. 事務隔離級別
- 8. SELECT語句 - NOLOCK與SET TRANSACTION隔離級別READ COMMITTED
- 9. Spring事務隔離級別vs數據庫隔離級別的優先級
- 10. ActiveJob/Resque髒讀。事務隔離級別
- 11. 事務,設置隔離級別
- 12. MySQL事務隔離級別破壞?
- 13. 事務隔離級別問題
- 14. 如何更改事務隔離級別
- 15. SELECTs的事務隔離級別
- 16. 設置mysql的事務隔離級別
- 17. 瞭解事務隔離級別
- 18. 事務隔離級別數量龐大
- 19. 事務中的隔離級別
- 20. NHibernate中的子事務隔離級別
- 21. 事務級別,nolock/readpast和併發
- 22. Teradata 14中的事務隔離級別與IsolationLevel.Snapshot密切匹配?
- 23. 如何設置事務隔離級別與DBUnit
- 24. 理解jpa鎖與事務隔離級別
- 25. 由事務隔離級別分隔的併發進程死鎖
- 26. java.sql.Connection隔離級別
- 27. mysql隔離級別
- 28. 防止事務一致性(事務類型;事務隔離級別)
- 29. SQL服務器隔離級別
- 30. 集成服務和隔離級別
注意`NOLOCK`暗示在2012 MSSQL過時,用等價`READUNCOMMITTED`提示更換。 [來源](http://msdn.microsoft.com/en-us/library/ms187373.aspx)。 – Jeroen 2013-05-12 14:41:12
建議的源代碼表示 - 在FROM子句中支持使用UPDATE或DELETE語句的目標表中的READUNCOMMITTED和NOLOCK提示將在未來的SQL Server版本中刪除。 `。它不會說`NOLOCK`已被棄用。目前,我相信`NOLOCK`和`READUNCOMMITTED`提示都可用。 – RBT 2016-08-23 10:52:34