2013-03-19 61 views
3

我最近開始在使用TSQL的表列中使用XML,發現它比我的平均日常3rd-Normal-Form-associative-tables-Query-joining慢得多,從我進行的測試中獲得了150萬行,我的意思是它比使用TSQL慢8倍3rd-Normal-Form-associative-tables-Query-joining。好處在於,使用XML時,如果以特定的方式進行設置,它會阻止您設置額外的關聯表(在我的測試中,我的關聯表(對於許多=多個關係的連接表達到750萬行)我用這是在尺寸存儲的信息相同)150萬行的XML表,不要介意我的咆哮,雖然,這只是2套表,我已經進行的測試。在TSQL中優化XML

問題

對於我來說,這很難解釋,因爲我只是一個初學者與SQL Server的中間體。在列中使用Untyped XML的最佳實踐是什麼,以及如何優化包含此XML的表以在最佳條件下執行速度,看我現在必須現在用SQL腳本處理XPath和XQuery(根據執行計劃,這似乎是導致嚴重速度放慢的原因)?

+0

我不認爲你可以直接比較存儲在一列中的XML文檔和存儲在多列(或表)中的規範化數據:它們是存儲相同數據的不同方法,更好取決於你如何使用數據庫。如果性能是您最關心的問題,那麼即使需要更多的開發時間來實施,使用標準化表格方法也可能會更好。在這種情況下,查看table rowcount並不是很有用:如果表的設計和索引合理,7.5m行數並不多。 – Pondlife 2013-03-19 20:19:22

+0

您會發現,規範化的方法比XML更快捷,但由於我的同事略微疏忽,他們計劃將數據作爲逗號分隔值存儲在列中,要求客戶端分割使用此信息。我們的結論是,開發時間對於這個操作來說變得至關重要,因爲這張表已經重新設計了14次。速度在這裏不是一個超級關鍵問題(我們的服務器是無所不能的),但是我們可以從這個查詢中獲得的每一點小小的性能都會爲用戶帶來更好的客戶端體驗。感謝 – Eon 2013-03-20 11:00:21

+0

是否存在將數據存儲爲xml-value或xml-attribute的速度差異? <部分prop42 =「110V - 220V」 />或 「110V - 220V」 Reinhard 2014-09-04 10:51:53

回答

2

有幾件事情可以做,以提高XML領域的表現

  • 添加一個主XML索引
  • 添加輔助指標
  • 使用XML模式
  • 創建一個計算字段從XML中提取數據

XML字段傾向於IO密集度略低但是CPU數量多ntensive。檢查是否是一個問題

+0

我已簽出今天你的一些做法,也發現之類的東西,宣佈一個根節點(告訴TSQL即根節點是一個單身人士),我只實現了一些計劃,只有很小的變化(比如AVERAGE上查詢的0.8秒加速)。最後,這並不重要。無論如何,這張表的預期大小隻有20萬行而不是150萬行,所以它沒有生存或死亡的問題。再次感謝。 – Eon 2013-03-20 10:56:45