2011-07-10 77 views
4

在SQL Server 2008 R2标准版中压缩XML数据类列是否有直接的方法?在SQL Server 2008 R2中压缩XML列

我的约束是:

  1. 的SQL Server 2008 R2标准版;
  2. 必须将原始XMl存储在数据库中;

我以前问过关于广义文本存储Compressing a text field in Sql Server 2k8 R2的一个类似问题,其结果是使用FILESTREAMS。如果我这样做,尽管我会失去SQL Server公开的所有XML功能,我想利用它。

+0

你不能压缩特定的列 - 但在SQL Server 2008和更新的版本中,你可以压缩行或页面 - 参见[本博客文章](http://blogs.msdn.com/b/sqlserverstorageengine/archive/) 2007/11/12/types-of-data-compression-in-sql-server-2008.aspx) –

回答

4

您可以始终将XML存储为NVARCHAR,然后在视图上利用XML功能来针对先将数据转换为XML的列。但是,您必须权衡多少运行时工作抵消了压缩的好处(将会有显着的CPU开销,与实际实现的压缩量成正比)。我可以理解在一个I/O绑定系统中做这种事情的愿望,但是我怀疑XML列不适合压缩,正是出于这个原因 - 成本往往超过了好处。如果你真的想将数据存储为压缩数据,而你最关心的是存储空间,我会考虑让你的应用程序进行压缩(C#在这里比T-SQL更灵活,并且我预期会进行本地压缩)并让您的应用程序处理XML功能。

0

PAGE/ROW COMPRESSION,我知道的唯一“直接”方式不适用于XML列,因为它不适用于LOB页面。 正如解释 in this very good article所述,使用CLR实现的GZIP压缩有一种解决方法。一个缺点是整个XML在执行查询时必须适合内存。此外,它可能是 相当缓慢,所以“你应该小心,并考虑所有因素”