2010-05-06 85 views
5

我們有一個存儲XML Web服務請求和響應的歷史表。目前它將它們存儲到一個XML字段中,但是我們遇到了插入的性能問題。我們只插入記錄,不更新,選擇或刪除。我們截斷了桌子並重建了索引,但無濟於事。該表在標識字段上具有主聚集索引,在日期時間字段上具有默認值GetDate()。我們正在運行SQL 2005 Server,但數據庫處於SQL 2000兼容模式。哪個插入更快,XML字段或Varchar(max)字段?

如果我們將字段類型從XML更改爲VarChar(max)或VarChar(xxx),是否會加速插入?還有什麼我們應該看的?

謝謝。

+0

我甚至不知道在SQL Server 2000兼容模式下,您可以在數據庫中使用XML數據類型? – Tomalak 2010-05-06 15:42:52

回答

3

varchar速度更快 - 無需解析。 XML數據類型在內部提升方面做了很多工作。

+1

另一方面,將XML文檔存儲在XML列中會減少使用的空間 - XML針對存儲進行了優化。 – 2010-05-06 16:36:42

+1

其中,雖然不是問題;) – TomTom 2010-05-06 16:55:18

6

這取決於性能問題。

  • 如果是CPU綁定,那麼XML驗證可能是一個因素,varchar(max)可能會更快。
  • 如果是IO綁定,那麼XML壓縮存儲比nvarchar(max)寬鬆格式更好,你會失去性能。
  • 另一方面,如果問題XML片段很小,則varchar存儲器提供了行內存儲的機會,並且可能比XML更好地下注。另一方面,行內存儲將減少葉子頁面行讀取密度並導致性能問題。
  • 如果問題既不是CPU也不是IO,而是鎖定爭用,那麼XML vs. varchar問題與性能問題是正交的。插入熱點頁面鎖存爭用問題也是如此。再次,同樣適用於日誌刷新性能問題。所有將顯示爲「慢插入」(對於一些慢的定義),並且沒有一個會通過用varchar替換XML而稍微改變。

因此,與所有性能問題一樣,建議先測量並稍後切割。建議的方法是應用經過充分測試和驗證的性能調查方法,如Waits and Queues。猜測會讓你無處飛快。

+0

感謝您的徹底解答!以下是我所知道的:不是CPU,IO是一個考慮因素,XML片段很小,沒有讀取,因此沒有讀取問題,沒有鎖定,閂鎖爭用,沒有日誌刷新問題。幸運的是,這是一個「很高興」的日誌,所以我們禁用了它,並將在QA中進行脫機處理,我們可以在其中監控和測試。 – Jim 2010-05-07 13:13:10