2011-10-03 13 views
9

Sql-Server veritabanında bir tabloya rowversion sütun ekleme performans sonuçları olup olmadığını merak ediyordum?RowVersion ve Performans

+3

? Bir rowversion gerekiyorsa, bir rowversion gerekir .... –

+2

Mitch ile katılıyorum. İhtiyacınız olursa, değiştirmek için hangi geçici çözümü kullanırdınız? arasında – gbn

+0

olası yinelenen [rowversion/zaman damgası, performansı önemli ölçüde etki yapar] Bir rowversion sütun sahip olmayan aksine (http://stackoverflow.com/questions/7217062/does-rowversion-timestamp-affects-performance-significantly) –

cevap

14

birkaç performans etkileri vardır, rowversion eski zaman damgası veri türü için sadece yeni bir isimdir. Yani veritabanınızın ek ikili alanı saklaması gerekecek. Geçen @rowVersion beri güncellenen öğelerin listesini almak için kullanılabilecek yaygın yoludur

SELECT * 
FROM MyTable 
WHERE rowVersion > @rowVersion 

, aşağıdaki gibi bu verilere sorguları yapmak çalıştığınızda Kişisel performansı çok daha yaşayacaktır. Bu iyi görünüyor ve 10,000 satırlı bir tablo için mükemmel çalışacaktır. Eğer 1 milyon satır geldiğinizde Ama her zaman bir tablescan yapıyor ve masa artık sunucunun RAM içinde tamamen uyuyor çünkü performans isabet olduğunu çabucak keşfedeceksiniz.

Bu rowVersion sütun ile karşılaşıldığında yaygın bir sorundur, sihirli başlıbaşına endeksli değildir. Ayrıca, ne zaman indeks varolan öğeleri güncellemek olarak endeks boyunca boşluklar bırakarak yeni güncellenmiş değerleri her zaman indeksi dibinde olacak çünkü indeksi genellikle zamanla çok parçalı alacak kabul etmek zorunda bir rowversion kolonu, .

Düzenleme: Güncelleştirilmiş öğeleri denetlemek için rowVersion alanını kullanmıyorsanız ve bunun yerine son okumadan sonra kaydın güncelleştirilmediğinden emin olmak için tutarlılık için kullanacaksanız, o zaman Mükemmel kabul edilebilir bir kullanım ve etki etmeyecek.

ne karşılaştırıldığında
UPDATE MyTable SET MyField = ' @myField 
WHERE Key = @key AND rowVersion = @rowVersion 
İlgili konular