2011-07-10 151 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在執行查詢時必須適合內存。此外,它可能是 相當緩慢,所以「你應該小心,並考慮所有因素」