相关疑难解决方法(0)

我可以批量插入空的页面压缩表并获得完全压缩吗?

我有很多大表(大约 1000 万行宽)需要定期加载到 SQL Server 2016 中以进行只读报告。我希望这些表在磁盘上尽可能小,这比加载或查询的性能改进更重要。

这是我对不需要进一步索引的表所做的工作:

  1. 使用DATA_COMPRESSION=PAGE.
  2. 使用 bcp 将平面文件中的数据批量插入到新表中。

表中的列类型是 varchar(不超过 512,不是最大值)、float、tinyint 或日期(不是日期时间)。所有列都创建为可为空的,并且没有定义主键或外键——它们与查询无关,表永远不会直接更新。一切的默认排序规则是SQL_Latin1_General_CP1_CI_AS.

当我这样做时,我可以看到sys.allocation_units该页面数据压缩已应用于堆,并且我可以看到sys.partitions填充因子正确为 0 (100%)。由于表比未压缩的表小得多,我认为压缩已完成。

但是,如果我然后使用相同的选项重建DATA_COMPRESSION=PAGE,则假定已经压缩的表会缩小大约 30%!看起来它从每个数据页大约 17 行到每页 25 行。(虽然只有一次。在那之后再次重建不会使它比第一次重建更小。)

问题

所以我的问题是:(a)这里发生了什么?(b) 有没有办法在加载表时直接获得这个超小的压缩大小,而无需在加载数据后重建?

sql-server bcp compression sql-server-2016

7
推荐指数
2
解决办法
1278
查看次数

标签 统计

bcp ×1

compression ×1

sql-server ×1

sql-server-2016 ×1