存储过程XML解析性能

时间:2013-07-09 13:50:57

标签: sql-server xml performance tsql parsing

我有一个带有XML变量解析代码部分的SP。

XML有下一个结构:

<root>
  <ID Reason="1">1</ID>
  <ID Reason="2">2</ID>
  <ID Reason="2">3</ID>
  <ID Reason="1">5</ID>
</root>

SP代码部分:

INSERT INTO #tmp_table (ID,Reason)
SELECT IDs.ID.value('.', 'int')
     , IDs.ID.value('@Reason', 'int')
FROM @I_XML.nodes('/root/ID') AS Ids(ID)

当我尝试使用具有100000行的XML输入参数运行SP时,需要花费大量时间并且执行成本为5%。

如何改进SP代码部分以加快速度?

2 个答案:

答案 0 :(得分:2)

您可以尝试更改获取节点值的方式。

INSERT INTO #tmp_table (ID,Reason)
SELECT IDs.ID.value('text()[1]', 'int')
     , IDs.ID.value('@Reason', 'int')
FROM @I_XML.nodes('/root/ID') AS Ids(ID)

通过指定text()节点,您将获得稍微不同的执行计划而不更改结果。仅使用节点名称(在您的情况下为.)将使SQL Server深入搜索指定节点下的所有节点值。在您的XML中没有,所以结果将是相同的。

答案 1 :(得分:0)

尝试使用OPENXML

declare @hXml int

exec sp_xml_preparedocument @hXml output, @YourXmlParam

insert into #tmp_table
select ID, Reason
from OPENXML(@hXml, '/root/ID') with (ID int '.', Reason int '@Reason')

exec sp_xml_removedocument @hXml