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:從零開始的軟體開發生活」
請大家繼續支持 ^_^