【问题标题】:querying XmL string taking too long查询 XmL 字符串耗时过长
【发布时间】:2013-09-02 09:33:30
【问题描述】:

我有一个 XML

  <applicationbuilds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://analysiscenter.veracode.com/schema/2.0/applicationbuilds" xsi:schemaLocation="https://analysiscenter.veracode.com/schema/2.0/applicationbuilds https://analysiscenter.veracode.com/resource/2.0/applicationbuilds.xsd" >
<application app_name="Architecture" app_id="15439">
<build   version="V 2.0" build_id="16158">

</build>
</application>
</applicationbuilds>

我使用以下查询从 xml 中选择 appid、build_id 和版本。

;WITH XMLNAMESPACES(DEFAULT 'https://analysiscenter.veracode.com/schema/2.0/applicationbuilds')
SELECT 

   Y.ID.value('../@app_id', 'varchar(max)') as app_id,
  Y.ID.value('@build_id', 'varchar(max)') as build_id,
   Y.ID.value('@version', 'varchar(max)') as build_name

FROM @XML.nodes('//applicationbuilds/application/build') as Y(ID)

虽然效果很好,但是查询返回结果集需要很长时间。如果我只是避开这条线

 Y.ID.value('../@app_id', 'varchar(max)') as app_id,

查询运行只需不到一秒的时间。所以上面的代码行导致了延迟。获取 app_id 而不会造成如此多延迟的最佳方法是什么?

SQL 小提琴链接:http://sqlfiddle.com/#!3/d41d8/19883 谢谢

【问题讨论】:

    标签: sql sql-server xml sql-server-2008 xml-parsing


    【解决方案1】:

    取决于可以有多少“应用程序”和“构建”元素。

    只有一个“应用”元素和一个“构建”元素:

    ;WITH XMLNAMESPACES(DEFAULT 'https://analysiscenter.veracode.com/schema/2.0/applicationbuilds')
    SELECT
        Y.ID.value('@app_id', 'varchar(max)') as app_id,
        Y.ID.value('(build/@build_id)[1]', 'varchar(max)') as build_id,
        Y.ID.value('(build/@version)[1]', 'varchar(max)') as build_name
    FROM @XML.nodes('(/applicationbuilds/application)[1]') as Y(ID)
    

    许多“应用程序”和“构建”元素:

    ;WITH XMLNAMESPACES(DEFAULT 'https://analysiscenter.veracode.com/schema/2.0/applicationbuilds')
    SELECT
        Y.ID.value('@app_id', 'varchar(max)') as app_id,
        Z.Z.value('@build_id', 'varchar(max)') as build_id,
        Z.Z.value('@version', 'varchar(max)') as build_name
    FROM @XML.nodes('/applicationbuilds/application') as Y(ID)
    CROSS APPLY Y.ID.nodes('build')Z(Z)
    

    【讨论】:

    • 就像一个魅力!我的是你指定的第二种情况。现在只需要不到一秒钟.. 谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2011-11-03
    • 2015-10-23
    • 2012-11-04
    • 2013-07-24
    • 2015-09-08
    • 2016-11-04
    相关资源
    最近更新 更多