【发布时间】:2013-06-24 09:57:18
【问题描述】:
我有一个接受 XML 参数的存储过程。到目前为止,我目前的实现是使用这种方法扫描整个我的 SP 的整个 XML 的节点:
SELECT
tbl.col.value('col1[1]', 'varchar(100)') as colA
tbl.col.value('col1[2]', 'varchar(100)') as colB
tbl.col.value('col1[3]', 'varchar(100)') as colC
tbl.col.value('col1[4]', 'varchar(100)') as colD
FROM @xmLInput.nodes('//root/elem1') as tbl(col)
现在我正在研究优化我的 SP。我的一个朋友建议将 @xmlInput 的所有值存储在一个表中,并在整个 SP 中使用该表,而不是在我的 SP 的其余部分使用 @xmlInput 中的 SELECT。
你们认为把它放在临时桌子上会更好吗?
【问题讨论】:
-
您是否尝试过测量这两种不同的方法?使用执行计划?
-
是的,我做到了,但我得到了可变的结果,可能是因为有许多用户使用同一台服务器。但老实说,我认为拥有一张临时表会更昂贵,你怎么看?
-
我宁愿倾向于这样的临时表,因为提取 XML 的成本可能很高。也就是说,它还取决于 XML 中的“行”数,如果不是很多,我看不出开销会那么多。不过我想说的是,将它放在临时表中,也会减少从 XML 中获取它的代码的冗余。
-
感谢 asstrander,关于 XML 中的行数,通常为 50 行或更少。是的,我认为这对于减少冗余来说是个好主意。非常感谢阿斯特兰德 :)
标签: sql xml performance optimization