4

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

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

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

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

首先,有人知道 Stats_Stream 是否包含所有统计数据吗?然后,重要的是,它是如何以二进制形式存储的?

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

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

4

1 回答 1

4

如果我理解您的问题,则统计数据流是统计数据的二进制表示,可用于完全重新创建统计数据,即使在具有不同数据的另一个表上(尽管模式相同)也是如此。凯文克莱恩在这里写了博客。我在这里尝试了更好的自动化。

于 2012-04-25T04:01:11.370 回答