Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 行版本和性能_Performance_Sql Server 2008 - Fatal编程技术网

Performance 行版本和性能

Performance 行版本和性能,performance,sql-server-2008,Performance,Sql Server 2008,我想知道在Sql Server数据库的表上添加rowversion列是否会对性能产生影响?性能影响不大,rowversion只是旧时间戳数据类型的新名称。因此,数据库需要存储额外的二进制字段。当您尝试对这些数据进行查询时,您的性能将受到更大的影响,例如: SELECT * FROM MyTable WHERE rowVersion > @rowVersion 这是自上次@rowVersion以来获取更新项目列表的常用方法。 这看起来很好,对于一个有10000行的表来说非常适合。但是当您到

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

性能影响不大,rowversion只是旧时间戳数据类型的新名称。因此,数据库需要存储额外的二进制字段。当您尝试对这些数据进行查询时,您的性能将受到更大的影响,例如:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion
这是自上次@rowVersion以来获取更新项目列表的常用方法。 这看起来很好,对于一个有10000行的表来说非常适合。但是当您到达1M行时,您会很快发现它一直在做一个表扫描,您的性能下降是因为您的表现在不再完全适合服务器的RAM

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

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

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

和什么相比?如果你需要一个rowversion,你需要一个rowversion……我同意米奇的观点。如果需要,您将使用什么解决方法来替换它?与没有rowversion列相反,可能是的重复。我只是想知道,如果我要向一个具有rowversion列的表中添加一百万行,插入这些行所需的时间是否会明显增加如果您在这里考虑使用rowversion来查找更新的记录,请查看更改跟踪。据我所知,rowversion是DB范围的,并且每当在具有行的表中插入/更新行时,它都会递增。如果很多表都有,这难道不会导致一些争论吗?