SQL 2008字典数据压缩 - 这仅适用于WHOLE列匹配吗?

时间:2009-10-30 19:05:25

标签: sql sql-server-2008 compression

为简单起见,假设我每行有一个varchar(50),这些是我的行:

1)快速的棕色狐狸跳过懒狗 2)我喜欢棕狐 3)狐狸 4)狐狸

因此,页面压缩会找到例如fox这个词并将其放入字典中。只有第3行和第4行会受益,第1行和第2行不会,因为它们也包含其他数据吗?这似乎是凭经验发生的。我有一堆具有高度重复段(尖括号,重复属性名称等)的XML数据,如果我将其保存为CSV并将其作为控件案例压缩,则可以很好地压缩,但我在SQL服务器中获得了几乎0%的压缩。我已经确认通过查看sys.dm_db_index_physical_stats page_count和compressed_pa​​ge_count确实进行了一些压缩,所以我知道我的结构中没有任何内容可以像过大的行那样完全阻止压缩。

此处的示例仅包括整列而非子集,因此我明确要求。

http://blogs.msdn.com/sqlserverstorageengine/archive/2008/01/18/details-on-page-compression-page-dictionary.aspx

2 个答案:

答案 0 :(得分:0)

请参阅Page Compression Implementation

根据我的理解,值'fox'将放在字典中,字典值将替换页面上的所有出现,因此所有行都应受到影响。

您的数据是存储在(n)varchar列还是XML列中?

答案 1 :(得分:0)

我忘了提到我确认除了我做过的实证测试外,我还与微软确认了这一点。是的,字典数据压缩适用于整个列或至少只有PREFIX匹配。