我見過開發人員在查詢中使用WITH(nolock),是否有任何缺點? 另外,查詢的默認執行模式是什麼?我的數據庫沒有任何索引。使用WITH(NOLOCK)提高性能
有沒有其他方法可以提高數據庫選擇語句的性能?
我見過開發人員在查詢中使用WITH(nolock),是否有任何缺點? 另外,查詢的默認執行模式是什麼?我的數據庫沒有任何索引。使用WITH(NOLOCK)提高性能
有沒有其他方法可以提高數據庫選擇語句的性能?
nolock常見的誤解是它在執行時不會鎖定數據庫。從技術上講,它會發出模式穩定性(sch-s)鎖,所以鎖的「否」部分與查詢的數據端相關。
大多數情況下,我看到這一點,開發人員提前做出優化是因爲他們聽說它使查詢更快。
除非您在接受髒讀(並可能讀取同一行兩次)中安裝證明和有效性,否則不應該使用它 - 它肯定不應該是查詢的默認方法,而是規則的一個例外可以證明它是必需的。
網上有很多關於此的文章。主要風險在於NOLOCK
可以從表中讀取未經處理的數據(髒讀)。例如,請參閱http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx或http://www.techrepublic.com/article/using-nolock-and-readpast-table-hints-in-sql-server/6185492
指向msdn的鏈接文章壞了。新的鏈接將是https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql – 2017-11-24 03:15:31
NOLOCK
在從常用表格中讀取舊數據時非常有用。考慮下面的例子,
您有一個存儲過程來訪問非活動項目的數據。您 不希望此存儲過程在讀取舊數據時鎖定經常使用的項目表 表。
NOLOCK
時也很有髒讀不是一個問題,數據不被頻繁修改,如在下列情況下,國家,貨幣等
閱讀列表...從數據庫在窗體中顯示 。這裏的數據保持不變,髒讀將不會造成大問題,因爲它很少會發生。
那麼,我會開始添加索引來提高性能。你可以得到一個巨大的表演。利用索引獲得收益 – 2011-03-21 10:18:12
可能的重複[SQL - 何時應該使用「with(nolock)」](http://stackoverflow.com/questions/686724/sql-when-should-you-use-with-nolock) – 2011-03-21 10:27:08