1

我有一个很大的 xml 流,我传递给一个存储过程,但是我在 xml 的特定部分得到了将近 1.30 分钟的长响应时间,并且重复了很多。

我检查了执行计划,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)  

谢谢您的帮助!

4

1 回答 1

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)  
于 2012-09-17T13:46:47.830 回答