0

网络中是否有任何信息,我可以在其中验证临时表功能的存储成本有多高?

服务器会创建被修改的行/元组的完整硬拷贝吗?或者服务器是否会使用未修改的主表原始值的引用/链接?

例如。我有一行 10 列 = 存储 100 KB。我更改了该行的一个值,两次。更改后,我在历史表中有几行。主表和历史表的填充存储成本是否约为 300KB?

感谢您的每一个提示!

拉加兹

4

1 回答 1

0

服务器会创建被修改的行/元组的完整硬拷贝吗?或者服务器是否会使用未修改的主表原始值的引用/链接?

这是Dmitri Korotkevitch 所著的 Pro SQL Server Internals一书的引用,它回答了您的问题:

简而言之,每个时态表由两个表组成——包含当前数据的当前表和存储旧版本行的历史表。每次修改或删除当前表中的数据时,SQL Server 都会将这些行的原始版本添加到历史表中

当前表应该总是有一个primary key定义的。此外,当前表和历史表都应该有两 datetime2 列,称为周期列,指示行的生命周期。SQL Server 在创建新版本的行时根据事务开始时间自动填充这些列。当一行在一个事务中被多次修改时,SQL Server 不会在历史表中保留未提交的中间行版本。

SQL Server 将历史表放置在默认文件组中,在控制行生存期的两个 datetime2 列上创建非唯一聚集索引。它不会在表上创建任何其他索引。

在 Enterprise 和 Developer Edition 中,历史表compression默认使用 page。

所以不是

参考/链接到主表的原始值

以前的行版本只是被复制到每个修改的历史表中。

于 2018-02-09T11:46:08.157 回答