大家在寫查詢時,為了效能,往往會在表後面加乙個nolock
,或者是with(nolock)
,其目的就是查詢是不鎖定表,從而達到提高查詢速度的目的。
當同一時間有多個使用者訪問同一資源,併發使用者中如果有使用者對資源做了修改,此時就會對其它使用者產生某些不利的影響,例如:
乙個使用者對乙個資源做了修改,此時另外乙個使用者正好讀取了這條被修改的記錄,然後,第乙個使用者放棄修改,資料回到修改之前,這兩個不同的結果就是髒讀。
乙個使用者的乙個操作是乙個事務,這個事務分兩次讀取同一條記錄,如果第一次讀取後,有另外使用者修改了這個資料,然後第二次讀取的資料正好是其它使用者修改的資料,這樣造成兩次讀取的記錄不同,如果事務中鎖定這條記錄就可以避免。
指使用者讀取一批記錄的情況,使用者兩次查詢同一條件的一批記錄,第一次查詢後,有其它使用者對這批資料做了修改,方法可能是修改,刪除,新增,第二次查詢時,會發現第一次查詢的記錄條目有的不在第二次查詢結果中,或者是第二次查詢的條目不在第一次查詢的內容中。
nolock
語句執行時不發出共享鎖,允許髒讀 ,等於read uncommitted
事務隔離級別 。nolock
確實在查詢時能提高速度,但它並不是沒有缺點的,起碼它會引起髒讀、只適用與select
查詢語句。 在一些不需要考慮髒讀的場合會用到,例如當使用者在論壇發廣告貼時刪除其所有發帖,這個查詢就不怕髒讀,全刪,或者漏乙個正在發的都不是問題。
select
count
(userid)
from employee with
(nolock)
join working_group with
(nolock)
on employee.userid = working_group.userid
1:資料量特別大的表,犧牲資料安全性來提公升效能是可以考慮的;
2:允許出現髒讀現象的業務邏輯,反之一些資料完整性要求比較嚴格的場景就不合適了,像金融方面等。
3:資料不經常修改的表,這樣會省於鎖定表的時間來大大加快查詢速度。
4、當使用nolock
時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考慮transaction
事務資料的實時完整性時,使用with (nolock)
就要好好考慮一下。
1、sql05
中的同義詞,只支援with(nolock)
;
2、with(nolock)
的寫法非常容易再指定索引。
3、跨伺服器查詢語句時不能用with (nolock)
只能用nolock
,同乙個伺服器查詢時 則with(nolock)
和nolock
都可以用
sqlserver 人名 SQLSERVER題庫
一 選擇題 每題 2.5分,共 分 下面語句中,哪種語句用來建立檢視 acreate table b alte view c drop view d create view 下面語句中,哪種語句用來修改檢視 acreate table b alte view c drop view d create...
sqlserver的statistics操作語句
查詢索引操作的資訊 select from sys.dm db index usage stats 查詢指定表的統計資訊 sys.stats和sysobjects聯合查詢 select o.name,表名 s.name,統計資訊的名稱 auto created,統計資訊是否由查詢處理器自動建立 us...
SQL server鎖的機制
sql server 的所有活動都會產生鎖。鎖定的單元越小,就越能越能提高併發處理能力,但是管理鎖的開銷越大。如何找到平衡點,使併發性和效能都可接受是 sql server 的難點。sql server 有如下幾種瑣 1 共享鎖用於唯讀操作 select 鎖定共享的資源。共享鎖不會阻止其他使用者讀,...