如何在通过linked server加载创建表的同时实现数据压缩
SQL Server通过Linked Server导数据同步启用压缩的实现方案
默认SELECT ... INTO语句不会自动继承源表的压缩配置,也无法在低版本SQL Server中直接指定压缩参数,可根据你使用的数据库版本选择以下两种方案:
方案1:全版本兼容方案(推荐)
先创建带压缩属性的空表,再插入跨服务器数据:
- 第一步:生成与源表结构一致的空表并启用压缩
如果你不想手动编写全量字段定义,可以用以下语句快速生成空表后修改压缩属性:-- 仅导入表结构,不导入数据 SELECT TOP 0 * INTO [DB].[dbo].[NewTable] FROM [LinkedServer].[DB].[dbo].[ExistingTable]; -- 给空表启用压缩,可选压缩类型为ROW或PAGE ALTER TABLE [DB].[dbo].[NewTable] REBUILD WITH (DATA_COMPRESSION = PAGE); - 第二步:插入全量数据,插入过程会自动按配置完成数据压缩
-- 加TABLOCK提示可启用最小日志记录,大幅提升大数据量插入速度 INSERT INTO [DB].[dbo].[NewTable] WITH (TABLOCK) SELECT * FROM [LinkedServer].[DB].[dbo].[ExistingTable];
如果你的表以高频写入更新操作为主,选ROW压缩的性能开销更小;如果是读多写少的归档类表,选PAGE压缩能获得更高的压缩比
方案2:SQL Server 2016及以上版本极简方案
2016及更高版本的SQL Server支持在SELECT ... INTO语句中直接指定存储配置,一步完成操作:
SELECT * INTO [DB].[dbo].[NewTable] WITH (DATA_COMPRESSION = PAGE) FROM [LinkedServer].[DB].[dbo].[ExistingTable];
内容的提问来源于stack exchange,提问作者MedEc
相关产品推荐
相关产品推荐

