压缩SQL Server 2008 R2中的XML列

时间:2011-07-10 21:37:20

标签: xml sql-server-2008

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

我的约束是:

  1. SQL Server 2008 R2标准版;
  2. 必须将原始XMl存储在数据库中;
  3. 我之前曾询问过有关广义文本存储Compressing a text field in Sql Server 2k8 R2的类似问题,其结果是使用FILESTREAMS。如果我在这里这样做,虽然我将失去SQL Server公开的所有XML功能,我想利用它。

2 个答案:

答案 0 :(得分:4)

您始终可以将XML存储为NVARCHAR,然后在针对该列的视图上使用XML功能,该列首先将数据转换为XML。但是,您必须权衡运行时工作量抵消压缩的好处(将产生大量的CPU开销,与您实际实现的压缩量成比例)。我可以理解在I / O绑定系统中做这种事情的愿望,但我怀疑XML列不是压缩的候选者,正是出于这个原因 - 成本往往超过了它的好处。如果您真的打算将数据存储为压缩数据,并且您最关心的是存储空间,我会考虑让您的应用程序进行压缩(C#在这里比T-SQL更灵活,原生压缩将是,我希望)并让您的应用程序处理XML功能。

答案 1 :(得分:0)

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