2015-10-07 25 views
2

在一個巨大的數據庫上進行woking我正在提取大量的數據。例如我的查詢是爲什麼nolock在查詢數據庫時很重要

select * from temp 

這是造成我的應用程序的用戶錯誤,然後我意識到,我是因爲我的查詢時間太長的時間來提取數據。

然後我修改我的查詢與

select * from temp with(nolock) 

,然後一切順利。有人請解釋爲什麼nolock如此重要。

回答

5

NOLOCK覆蓋,以確保您從數據庫中讀取的數據是一致的規則和尊重ACID規則(A tomicity,C一致性,I solation,D可用性)。

如果你運行一個查詢沒有NOLOCK,那麼你將總是得到相同的結果返回(假設別人刪除或在此期間更新的任何數據)。

如果您運行查詢WITHNOLOCK兩次或更多,您的結果可能會有所不同。

NOLOCK實際上意味着您告訴DB返回它可以讀取的數據,而不管它是否被提交到數據庫中。

因此,總而言之:NOLOCK是非常重要的,如果你想準確數據與否。如果你想只是數據,那麼你可以使用NOLOCK,但它通常不是一個好主意。

+1

您的回答似乎與您的意思相反。 'NOLOCK'不能確保數據一致。獲得一致的數據是默認行爲。 – hvd

+0

@ hvd你是對的,它真的很早,並沒有我的咖啡。將更正,謝謝你的慷慨。 –

+0

答案表示它覆蓋了獲取一致數據的規則。所以,這意味着NOLOCK讓我們得到不一致的數據。所以,答案是完美的 –

1

WITH(nolock)提示是針對特定表或視圖的顯式命令,用於針對查詢的視圖內的表或表設置事務隔離級別。一旦發佈,鎖將不會用於表中的數據。這樣做的好處是不會有任何其他針對該表運行的查詢發生死鎖。另一個間接優點是,爲了對該數據保留鎖,將使用較少的內存

0

對於在MIS報告中使用的查詢,數據中的某些更改不會影響管理決策,您可以使用NOLOCK。

但是,您不應將NOLOCK用於操作查詢和操作報告。這可能會影響運營並且存在風險