2012-04-24 39 views
3

我在一台服务器上有一个巨大的表,并且需要将该表复制到生产服务器。我可以做到这一点,但后来我需要生成统计数据,这对于我不想要求处理大量工作的系统来说需要很长时间。如果我移动整个数据库,我需要关闭系统以删除现有的数据库,这是一个禁忌。TSQL STATS_STREAM(无证件功能)的格式是什么?它是否包含所有的统计数据?

皮纳尔戴夫后,http://blog.sqlauthority.com/2011/01/05/sql-server-copy-statistics-from-one-server-to-another-server/ 在帖子中,他概述了如何从一个表使用微软的“生成脚本”,它允许通过复制无证STATS_STREAM功能复制统计到一个新的。这是为了一张新桌子。我不确定是否可以用统计信息创建表格,然后写入所有数据,因为这会使系统想要更新统计信息 - 可能即使我已经自动生成统计信息。

我使用以下代码:(。该表是InvTbl,并在该表中我更新是GammaTheta统计的统计存在,并且所述数据是有)

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

首先,确实任何人都知道Stats_Stream是否包含所有的统计数据?那么重要的是,它如何以二进制形式存储?

注:该表存储了基于连接查找的两个变量的统计分布,并且具有关于输入分布的一些非常重要的特征。它是静态的,我永远不需要重新计算一次加载的值或统计信息。基于测试,不使用全扫描是不可行的,因为联接速度很重要并且受到影响。

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

回答

3

如果我理解你的问题,stats流是统计数据的二进制表示,可以用来完全重新创建统计信息,即使在具有不同数据的另一个表(尽管是相同的模式)上也是如此。凯文克莱恩博客约here。我采取了更好的自动化操作here

+0

将附加数据复制到数据库后,克隆数据库是否保留相同的统计信息? – 2012-04-25 11:53:34

+1

只有当您发出明确的“更新统计信息”语句或者为数据库设置了'is_auto_update_stats_on'或'is_auto_update_stats_async_on'之后,统计信息才会更新,并且自上次更新统计信息以来,数据的约10%已更改。不管怎么样,统计数据并不像索引那样实时维护。 – 2012-04-25 15:13:21

+0

即使添加行时,我也不需要更新它。我想可以关闭auto_update。 – 2012-04-27 13:57:06