【发布时间】:2018-04-05 18:27:58
【问题描述】:
我正在从一个广泛使用 XML 来存储时间序列数据的数据库生成报告。令人讨厌的是,这些条目中的大多数只包含一个值,使一切变得复杂而没有任何好处。在这里查看 SO,我发现了几个使用 OUTER APPLY 将这些字段解码为单个值的示例。
其中一个查询是在生产机器上超时,因此我正在寻找提高其性能的方法。该查询包含十几行类似于:
SELECT...
PR.D.value('@A', 'NVARCHAR(16)') AS RP,
...
FROM Profiles LP...
OUTER APPLY LP.VariableRP.nodes('/X/E') RP(D)
...
当我查看执行计划时,这些 OUTER APPLY 中的每一个都有巨大的运营商成本,尽管我不确定这是否真的意味着什么。无论如何,这些运算符占查询时间的 99%。
有人对如何改进这类查询有任何建议吗?我怀疑有办法在没有 OUTER APPLY 的情况下做到这一点,但我的 google-fu 失败了。
【问题讨论】:
-
你是说你想要一个假设只有一个匹配节点的查询?
-
我认为是这样,但我正在研究一个带有少量属性的示例数据库,所以我不确定我是否应该将其作为最终结论。我感觉正确的解决方案是简单地返回文本并使用 VBA 中的 DOM 解析它。
标签: sql-server xml tsql xpath xquery