RowVersion和性能

时间:2011-10-03 03:40:14

标签: performance sql-server-2008

我想知道在Sql-Server数据库中的表上添加 rowversion 列是否存在性能影响?

1 个答案:

答案 0 :(得分:14)

性能影响很小,rowversion只是旧时间戳数据类型的新名称。所以你的数据库需要存储额外的二进制字段。当您尝试对此数据执行查询时,您的性能会受到更多影响,例如:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

自上次@rowVersion以来,可用于获取更新项列表的常用方法。 这看起来很好,并且对于表示10,000行的表来说非常适合。但是当你达到1M行时,你会很快发现它一直在进行表扫描,而你的性能受到影响是因为你的表现在已不再完全适合服务器的RAM。

这是rowVersion列遇到的常见问题,它本身并没有神奇地编入索引。此外,当您索引rowVersion列时,您必须接受索引通常会随着时间的推移变得非常碎片化,因为新更新的值总是位于索引的底部,在更新现有项目时会在整个索引中留下空白

编辑:如果你不打算使用rowVersion字段来检查更新的项目,而是你将使用它来保持一致性,以确保自上次阅读后记录没有更新,然后这将是一个完全可以接受的用途,不会产生影响。

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