【发布时间】:2013-07-07 03:56:48
【问题描述】:
我有一个带有 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 代码部分以使其更快?
【问题讨论】:
-
如果 XML 看起来像这样,调用者是否有理由不能改为传递表值参数?
-
不,我不能改变输入参数的类型
-
我不会担心执行成本,但“疯狂的时间”听起来有点严重。那实际上是多少时间?在我在笔记本电脑上进行的测试中,您的查询需要 2 秒,而在我的答案中重写需要 1.5 秒。 OPENXML 版本耗时 4 秒。
-
您使用的是 Sql Server 2005 吗?有一个“基于元素的 xml 粉碎”错误,仅供参考。
-
如其他地方所述,我更喜欢创建一个@variable 或#temp 表...将 xml 切碎到其中.........然后点击“真实”表。将 2 个动作分开,切碎,然后是 CUD'ing。
标签: sql-server xml performance tsql parsing