TSQL STATS_STREAM(未记录的功能)的格式是什么?它是否包含所有统计数据?

时间:2012-04-24 20:40:23

标签: sql-server sql-server-2008 tsql table-statistics

我在一台服务器上有一个庞大的表,需要将表复制到生产服务器。我可以做到这一点,但后来我需要生成统计数据,这将花费很长时间在一个我不想要求处理大量工作的系统上。如果我移动整个数据库,我需要关闭系统以删除现有的数据库,这是禁止的。

Pinal Dave有一个帖子,http://blog.sqlauthority.com/2011/01/05/sql-server-copy-statistics-from-one-server-to-another-server/ 在帖子中,他概述了如何使用Microsoft的“Generate Scripts”将统计信息从一个表复制到一个新表,这允许通过未记录的STATS_STREAM功能进行复制。这是一个新表。我不确定我是否可以创建一个包含统计信息的表,然后写入所有数据,因为这会使系统想要更新统计信息 - 可能即使我自动生成统计信息关闭。

我正在使用以下代码:(表格是InvTbl,我正在更新的那张桌子的统计数据是GammaTheta。统计数据存在,数据就在那里。)

Update STATISTICS dbo.InvTbl [GammaTheta]  WITH STATS_STREAM = 0x0100002000...

首先,有人知道Stats_Stream是否包含所有统计数据?那么,重要的是,它是如何存储在二进制文件中的?

注意:该表存储了我们根据连接查找的两个变量的统计分布,并且具有一些关于输入分布的非常重要的特征。它是静态的,我永远不需要在加载后重新计算值或统计数据。基于测试,不使用fullscan不是一种选择,因为加入速度很重要且受到影响。

注2:不,数字不以省略号结尾。我把数据关了。

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题,统计数据流是统计数据的二进制表示,可用于完全重新创建统计数据,甚至可以用于具有不同数据的另一个表(尽管是相同的模式)。 Kevin Kline在博客上发表了here的博文。我采取了更好的自动化方法here