RowVersion和性能

Raj*_*Rao 9 performance sql-server-2008

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

Sep*_*eph 14

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

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion
Run Code Online (Sandbox Code Playgroud)

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

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

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

UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion
Run Code Online (Sandbox Code Playgroud)