【发布时间】:2012-03-20 16:10:15
【问题描述】:
我一直在尝试在 SQL Server 中进行压缩,但到目前为止我还没有看到预期的结果。
为了测试,我创建了一个包含单个 VARCHAR(8000) 列的新表,并在其中插入了 100k 行。每行包含大约 500 个单词的文本,使用 ZIP 压缩可以节省超过 90% 的空间。
我正在使用命令EXEC sp_estimate_data_compression_savings 'dbo', 'MyTable', NULL, NULL, 'PAGE' ; 来检查使用 PAGE 压缩可以节省多少空间,但它告诉我根本不会有太多空间。结果如下:
object_name schema_name index_id partition_number size_with_current_compression_setting(KB) size_with_requested_compression_setting(KB) sample_size_with_current_compression_setting(KB) sample_size_with_requested_compression_setting(KB)
MyTable dbo 0 1 94048 93440 40064 39808
这基本上没有节省。我哪里错了?
ps。我已经对NVARCHAR(4000) 列进行了相同的实验,并且压缩确实显示了节省,但我相信这是因为压缩强制使用 1 个字符而不是数据不需要 2 个字符的两个字符。它实际上并不像 ZIP 那样压缩数据。
【问题讨论】:
-
您使用的是页面压缩还是行压缩?桌子上的钥匙是什么?我不知道 500 字是一种很好的压缩模式,因为您不太可能在任何给定页面上获得大量压缩(压缩一次只在单个页面上起作用)。
-
我测试了 PAGE 和 ROW 压缩。上面的示例中使用了 PAGE。很多话都在重复。如果我压缩一个包含 500 个示例单词的文本文件,则压缩率超过 90%...
-
但是单个元组中的许多单词重复并不能很好地压缩。 ZIP 的好处是能够跨所有元组进行压缩。
-
@AaronBertrand 对于测试,我使用 int 作为 PK,并且还没有密钥进行了测试。两次结果相似。
-
@AaronBertrand 我不确定我是否跟随。为了澄清,文本在每一行(即在每个 VARCHAR 单元格中)和跨行中都有许多重复的单词。例如,我将小说存储在数据库中,每行存储一个页面。当然,这将是压缩的理想选择。
标签: sql-server sql-server-2008 sql-server-2008-r2