2012-09-17 289 views
1

我有一個很大的XML流,我傳遞給存儲過程,但我得到了一個很長的響應時間幾乎1.30分鐘的特定部分的XML重複很多。XML花費很長時間解析MSSQL

我檢查了執行計劃,2個xml結構部分幾乎佔用了所有的處理時間。我也嘗試在插入之前先將它讀入2個臨時表中,而不是幫助它。 XML的大小是368Kb,所以我有強烈的懷疑,我的xml要麼是不可靠的,要麼我缺少一些東西來幫助緩解解析。

有沒有更好的方式來制定xml,使Xpath()更容易解析?我真的不知道還有什麼要做。

的XML的結構是:

<root> 
<someobject> 
<param1></param1> 
<param1></param1> 
</someobject> 
<somethingelse> 
<param1></param1> 
<param1></param1> 
</somethingelse> 
<row1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
    <param1></param1> 
</row1> 

查詢我目前使用的:

Insert Into [Table] 
Select 
    XmlParam.Doc.value('fieldA[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldB[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldC[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldD[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldE[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldF[1]','UNIQUEIDENTIFIER') 
,XmlParam.Doc.value('fieldG[1]','bit') 
,XmlParam.Doc.value('fieldH[1]','bit') 
     From @Xml.nodes('//Flow/StepData') XmlParam(Doc) 

感謝您的幫助!

回答

0

試試這個,對您而言可能會更快。

Select 
    XmlParam.Doc.value('(fieldA/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldB/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldC/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldD/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldE/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldF/text())[1]','UNIQUEIDENTIFIER') 
    ,XmlParam.Doc.value('(fieldG/text())[1]','bit') 
    ,XmlParam.Doc.value('(fieldH/text())[1]','bit') 
From @Xml.nodes('//Flow/StepData') XmlParam(Doc) 
+0

這樣做的伎倆,執行從1.30分鐘減少到6秒。 /text()將它指向最終節點,沒有它,它指向整個元素。再次感謝!只有在你的回答結束後,我才能找到關於它的帖子:[link](http://milambda.blogspot.com/2007/02/sql-server-2005-xml-methods-part-three.html) – qminator