2011-10-03 59 views
9

我想知道在Sql-Server數據庫的表中添加rowversion列是否會影響性能?RowVersion和Performance

+3

相比有什麼?如果你需要排隊,你需要排隊...... –

+2

我同意米奇。如果你需要它,你會用什麼替代方法來替代它? – gbn

+0

[rowversion/timestamp可能會顯着影響性能?](http://stackoverflow.com/questions/7217062/does-rowversion-timestamp-affects-performance-significantly) –

回答

14

性能影響很少,rowversion只是舊時間戳數據類型的新名稱。所以你的數據庫將需要存儲額外的二進制字段。你的性能將受到更多的時候,你試着做查詢這個數據,如:

SELECT * 
FROM MyTable 
WHERE rowVersion > @rowVersion 

這是一個可以用來獲取自去年@rowVersion更新的項目列表中的常用方法。 這看起來很好,並且對於有10,000行的表格來說是完美的。但是當你達到1M行時,你會很快發現它一直在做掃描,而你的性能受到影響是因爲你的表現在不再完全適合服務器的內存。

這是rowVersion列遇到的常見問題,它並不神奇地編入索引。此外,當您索引rowVersion列時,您必須接受隨着時間的推移索引通常會變得非常分散,因爲新的更新值始終位於索引的底部,在更新現有項目時在索引中留下空白。

編輯:如果您不打算使用rowVersion字段檢查更新的項目,而是您將使用它來保持一致性,以確保記錄自上次讀取後不會更新,那麼這將繼續是一個完全可以接受的用途,不會產生影響。

UPDATE MyTable SET MyField = ' @myField 
WHERE Key = @key AND rowVersion = @rowVersion