[SQL]Read Committed Snapshot,NOLOCK 的另一個選擇

Read Committed Snapshot,NOLOCK 的另一個選擇

有時在程式中會看到一些SQL裡面會加上 NOLOCK ,我想主要是為了不想要在查詢時,會去拿Share Lock 而導致查詢效能比較不好。

在 SQL 2005 之後,我們可以使用 READ_COMMITTED_SNAPSHOT 來達到類似的效果,而不需要在 SQL 中去加入 NOLOCK。

那使用 NOLOCK 和 使用 READ_COMMITTED_SNAPSHOT 讀到的資料是否會不同呢?

當然有可能會不同呀! NOLOCK 有可能會讀取到未完成交易中的資料哦!

所以我們可以調整DB的設定,從預設的 READ_COMMITTED ,改成 READ_COMMITTED_SNAPSHOT 哦,如下的 SQL,

 


ALTER DATABASE [你的DBName]
	SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
GO

 

當然,這時的隔離等級還是 Read Committed 哦!

在「SQL SERVER – Difference Between Read Committed Snapshot and Snapshot Isolation Level」中,

有 Demo Read Committed 與 Read Committed Snapshot 的差別,蠻值得一看的哦!

 

參考資料

SQL SERVER – Difference Between Read Committed Snapshot and Snapshot Isolation Level

瞭解以資料列版本控制為基礎的隔離等級

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^