gpt4 book ai didi

sql-server - 为什么要使用交叉应用来获取 XML 中的值?

转载 作者:数据小太阳 更新时间:2023-10-29 03:00:28 25 4
gpt4 key购买 nike

几天前,我尝试用扩展事件替换 SQL Server 分析器。然后想把生成的xel文件用sql放到sql server数据库中。

我认为很奇怪,很多网站使用带有交叉应用的功能节点来获取 XML 中的值,即使它比不使用它更慢。我不知道我是否遗漏了什么?

我的查询示例 enter image description here

最佳答案

简而言之:你可以用链锯切面包,或者你可以使用一些裸线,但如果结果不令人信服,请不要责怪工具(即使它非常快 :-D )...

需要 .nodes()如果有1:n相关的子节点,以便将它们检索为派生表。

很多人用.nodes()只是为了提高代码的可读性,尤其是对于嵌套非常深的元素,当 XPath长到一定大小...

您将获得一个已命名的当前节点,您可以从中继续 XPath navigationXQuery .使用多个嵌套的 XML,您可以使用 .nodes() 的级联越来越深入地研究.

如果你能确定<event>下面只有一个元素用名字<data>具有属性 @Name值为 NTCanonicalUserName不需要 .nodes() .大概最快的方法是使用类似的东西

/event[1]/data[@name="NTCanonicalUserName"][1]/value[1]/text()[1]

重要!
如果可能不止一个<event>或多个<data>使用给定的属性,您的“快速”调用将在找到的任何地方返回第一次出现。这可能是错误的...而且您永远不会发现,还有另一个...

您的“快速”调用很快,因为引擎事先知道,只会有一个结果。与 .nodes() eninge 将不得不寻找进一步的事件,并将承担为派生表创建结构的开销。

一般建议
如果你知道一些东西,引擎无法知道,但会让读取速度更快,你应该帮助引擎......

很高兴知道
在内部,真实/ native XML 数据类型 并未存储为您看到的字符串表示形式,而是存储为层次结构树。处理 XML 的速度快得惊人……在您的情况下,搜索只是直接从树上跳到所需的元素。

关于sql-server - 为什么要使用交叉应用来获取 XML 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44628125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com