【问题标题】:Is it better to scan through an XML variable or create temporary table?扫描 XML 变量还是创建临时表更好?
【发布时间】: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


【解决方案1】:

我会尝试两种方式。我在我的代码中做了,发现 XML 比临时表快 8 倍。我还尝试动态生成查询,将所有内容都作为常量,这比 XML 快 10 倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2015-11-03
    • 2017-12-30
    • 2012-08-19
    • 2015-07-05
    相关资源
    最近更新 更多