2016-03-04 42 views
1

我對使用NOLOCK有疑問。NOLOCK提示減慢操作嗎?

我明白NOLOCK提示並不總是最好的方法,但在某些情況下,它是非常有幫助的。我並非試圖製造一直使用它的壞習慣

我只是想了解它的確切行爲。有這種不現實的說法,即更新記錄的過程,其中id = 10 UPDATE table1 SET status = 2 WHERE id = 10需要30秒更新。同時我執行SELECT * FROM table1 WITH NOLOCK where id = 10

即使我的第一個查詢對該記錄有一個排它鎖,或者我的select查詢是否等到沒有鎖定記錄之前它會允許讀?

我想知道NOLOCK的使用是否會導致延遲。

+0

[SELECT語句中的NOLOCK提示的影響]的可能重複(http://stackoverflow.com/questions/210171/effect-of-nolock-hint-in-select-statements) – DhruvJoshi

+3

相反,它可能會運行更快一點,因爲它不必關心鎖。是的,您的選擇查詢將讀取該行...大部分時間。它可能會錯過它,甚至可能會返回兩次。看看這篇文章。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/它的目標是讓人們遠離使用該提示,但它也有很多非常有價值的信息。如果認爲你需要閱讀它,那麼你就明白了這個提示的真正含義。 –

+3

'SELECT'可能會或可能不會讀取該行。這被稱爲髒讀,並且這樣的行可能被讀取爲零,一次或兩次。我注意到肖恩的評論引用了Aaron Bertrand在這個話題上的博客(我正在引用自己)。我第二次鼓勵你閱讀它。 –

回答

1

所述問題的簡短答案是:「否」

在大多數情況下,NOLOCK提示將加快查詢的速度,以及任何其他查詢同時對指定的表進行操作。原因是沒有鎖定被檢查或獲得。你已經在你的問題中列出了可能的副作用,所以我不會在這裏列出。

在一天結束時查詢會更快,但結果將是可疑的。