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

最佳答案

对性能几乎没有影响,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

10-08 10:52