在网络中是否有任何信息,我可以验证时态表特性的存储成本有多高?
服务器是否会创建已修改的行/元组的完整硬拷贝?或者服务器是否会使用对主表的原始值没有修改的引用/链接?
例如。我有10列=存储100 KB的行。我更改了一行的一个值,每次都是这样。在更改之后,历史表中有很多行。主表和历史表的填充存储费用是300 Is吗?
谢谢你的每一个提示!
拉加兹
发布于 2018-02-09 11:46:08
服务器是否会创建已修改的行/元组的完整硬拷贝?或者服务器是否会使用对主表的原始值没有修改的引用/链接?
下面是“Pro SQL Server Internals by Dmitri Korotkevitch”一书的引文,它回答了你的问题:
简而言之,每个时态表都由两个表组成--包含当前数据的当前表和存储旧版本行的历史表。每次修改或删除当前表中的数据时,Server都会将这些行的原始版本添加到历史表中。 当前表应该始终定义一个
primary key。此外,当前表和历史表都应该有两个datetime2列,称为句点列,它们指示行的生存期。SQL Server根据创建新版本行时的事务启动时间自动填充这些列。当一行在一个事务中被多次修改时,Server不会在历史表中保留未提交的中间行版本。 Server将历史记录表放置在默认文件组中,在控制行生存期的两个datetime2列上创建非唯一的聚集索引。它不会在表上创建任何其他索引。 在Enterprise和Developer中,历史表默认使用页面compression。
所以这不是
指向母版表原始值的引用/链接
以前的行版本只是复制到历史表中的每一个移动化。
https://stackoverflow.com/questions/48700772
复制相似问题