在SQL Server 2008 R2中压缩XML列

4

在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功能,而我想利用这些功能。


你不能压缩特定的列 - 但在 SQL Server 2008 及更高版本中,你可以压缩行或页面 - 可以参考这篇博客文章来了解一下。 - marc_s
2个回答

4
您可以始终将XML存储为NVARCHAR,然后针对该列使用视图中的XML功能,首先将数据转换为XML。但是,您需要权衡运行时工作量抵消压缩效益的程度(实际实现的压缩量与CPU开销成比例)。我可以理解在I/O绑定系统中进行此类操作的愿望,但我怀疑XML列不是压缩的候选项,正是因为这个原因 - 成本往往会超过收益。如果您真的想将数据存储为压缩格式,并且最大的担忧是存储空间,那么我建议让应用程序执行压缩(C#在这方面比T-SQL和本机压缩更加灵活),并且也让应用程序处理XML功能。

0

页面/行压缩是我所知道的唯一“直接”的方法,但它对于XML列不起作用,因为它不适用于LOB页。 有一个解决方法,使用CLR实现的GZIP压缩,如这篇非常好的文章所解释的那样。其中一个缺点是在执行查询时整个XML必须适合内存。此外,它可能会相当慢,因此“您应该小心并考虑所有...因素”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接