[英]SQL Server 2008 XML column performance Issue
我們有一個帶有XML列的表,其中包含很多數據,這在我們的開發環境中運行良好,但是隨着表的大小增加(接近10,000行),我們開始發現性能問題。
僅執行SELECT *
僅需12秒鍾...
有什么建議可以解決這個問題嗎?
提前致謝。
如果查詢記錄並過濾XML數據類型內的數據,則要求SQL Server檢查所有XML內容以查找結果。
為了加快速度,請將XML數據類型過濾器與全文搜索表達式結合使用。 在解析和搜索XML之前,全文搜索會縮小結果范圍(取決於您的具體程度)。 它可以節省大量CPU和IO。 這是一個例子:
SELECT *
FROM Table
WHERE CONTAINS(XmlColumn,'value')
AND XmlColumn.exist('/element/element/text()[contains(.,"value")]') = 1
這是由Microsoft 在此處記錄的 ,您可以通過運行帶有統計信息的查詢來檢查之前和之后。 這是您打開統計信息的方式:
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
只是要補充一下marc_s所說的話:我還建議使用索引-10k記錄不是很多。 但是請確保在正確的地方添加索引-通常,放置索引的最佳位置是在用於JOIN條件,WHERE子句或ORDER BY子句的列上。 如果在這些情況下您的查詢未使用XML本身,則可以通過在其他列上創建索引來更好地服務(例如,如果您正在非XML列中的ID上進行查找,則可能會看到通過在ID上創建索引獲得更多收益)。
如果實際上提取XML數據的速度很慢,則可以考慮創建覆蓋索引(使用INCLUDE關鍵字),在該索引上您具有ID上的索引,但是包含一個從XML列中提取值的表達式。 這對我的一個項目產生了巨大的影響,但請務必確保測試性能。
當然,如果您的查詢實際上是對XML數據執行JOIN / WHERE / ORDER BY,那么您可能應該執行marc_s建議的操作並在XML列上創建索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.