网上是否有任何信息,我可以在哪里验证时态表功能的存储成本有多高?
服务器是否会创建已修改的行/元组的完整硬拷贝? 或者服务器是否会使用引用/链接到未修改的主表的原始值?
例如。我有一行10列=存储100 KB。我改变那一行的一个值,thow times。在变化之后,我在历史表中有行。主表和历史表的填充存储成本是否约为300KB?
感谢您的每一个提示!
Ragards
答案 0 :(得分:0)
服务器是否会创建行/元组的完整硬拷贝 改性?或者服务器是否使用原始的引用/链接 未修改的主表的值?
以下是帮助您解答问题的书Pro SQL Server Internals by Dmitri Korotkevitch的引用:
简而言之,每个时态表由两个表组成 - 包含当前数据的当前表,以及存储的历史表 旧版本的行。 每次修改或删除数据时 在当前表中,SQL Server添加了这些行的原始版本 到历史表。
当前表应始终定义
primary key
。此外, 当前和历史表都应该有两个datetime2
列, 称为句点列,表示行的生命周期。 SQL 服务器根据事务自动填充这些列 创建行的新版本时的开始时间。当一排 已经在一个事务中多次修改过SQL Server 不保留历史记录中未提交的中间行版本 表SQL Server将历史记录表放在默认文件组中,创建 两个datetime2列上的非唯一聚簇索引 控制行寿命。它不会在上面创建任何其他索引 表。
在Enterprise Edition和Developer Edition中,历史记录表都使用 页面
compression
默认情况下。
所以它不是
引用/链接到主表的原始值
上一行版本只是在每个mofification上复制到历史表中。