在一個巨大的數據庫上進行woking我正在提取大量的數據。例如我的查詢是爲什麼nolock在查詢數據庫時很重要
select * from temp
這是造成我的應用程序的用戶錯誤,然後我意識到,我是因爲我的查詢時間太長的時間來提取數據。
然後我修改我的查詢與
select * from temp with(nolock)
,然後一切順利。有人請解釋爲什麼nolock如此重要。
在一個巨大的數據庫上進行woking我正在提取大量的數據。例如我的查詢是爲什麼nolock在查詢數據庫時很重要
select * from temp
這是造成我的應用程序的用戶錯誤,然後我意識到,我是因爲我的查詢時間太長的時間來提取數據。
然後我修改我的查詢與
select * from temp with(nolock)
,然後一切順利。有人請解釋爲什麼nolock如此重要。
當你說NOLOCK並執行你的查詢,那就像使用READ UNCOMMITED數據。因此,您已準備好讀取未提交的數據以及可以回滾的數據。所以你有閱讀髒數據的風險。
你可以參考:
NOLOCK
覆蓋,以確保您從數據庫中讀取的數據是一致的規則和尊重ACID規則(A tomicity,C一致性,I solation,D可用性)。
如果你運行一個查詢沒有NOLOCK
,那麼你將總是得到相同的結果返回(假設別人刪除或在此期間更新的任何數據)。
如果您運行查詢WITHNOLOCK
兩次或更多,您的結果可能會有所不同。
NOLOCK
實際上意味着您告訴DB返回它可以讀取的數據,而不管它是否被提交到數據庫中。
因此,總而言之:NOLOCK
是非常重要的,如果你想準確數據與否。如果你想只是數據,那麼你可以使用NOLOCK
,但它通常不是一個好主意。
WITH(nolock)提示是針對特定表或視圖的顯式命令,用於針對查詢的視圖內的表或表設置事務隔離級別。一旦發佈,鎖將不會用於表中的數據。這樣做的好處是不會有任何其他針對該表運行的查詢發生死鎖。另一個間接優點是,爲了對該數據保留鎖,將使用較少的內存
對於在MIS報告中使用的查詢,數據中的某些更改不會影響管理決策,您可以使用NOLOCK。
但是,您不應將NOLOCK用於操作查詢和操作報告。這可能會影響運營並且存在風險
您的回答似乎與您的意思相反。 'NOLOCK'不能確保數據一致。獲得一致的數據是默認行爲。 – hvd
@ hvd你是對的,它真的很早,並沒有我的咖啡。將更正,謝謝你的慷慨。 –
答案表示它覆蓋了獲取一致數據的規則。所以,這意味着NOLOCK讓我們得到不一致的數據。所以,答案是完美的 –