从nvarchar列获取xml节点值的SQL Query非常慢

时间:2011-10-20 08:21:24

标签: xml vba find duplicate-removal xmlnode

我有一个名为tblAdmissions的表,此表中的一列名为“ProgramInformation”。此列包含xml字符串,如

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="1">

  <COURSE>reference_project</COURSE>

  <FEE>true</FEE>

</row>

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="2">
  <COURSE>RoomID</COURSE>
  <FEE>99</FEE>

</row>

我正在使用此查询通过使用交叉应用来获取此列中的值,而且速度很慢。


使用vDynamic AS(             选择

            xmlProgramInformation = CAST(ProgramInformation AS XML)
        FROM 
            tblAdmission

        )

SELECT 

  t.p.query('COURSE' ).value('.', 'varchar(max)') AS Decipline, 
  t.p.query('FEE' ).value('.', 'varchar(max)') AS CourseFee 

FROM 
  vDynamic 
  CROSS apply xmlProgramInformation.nodes('/DOCUMENT/ROWS/row') AS t(p)

是否有其他方法可以让我的查询快速运行。

由于

1 个答案:

答案 0 :(得分:0)

您可以尝试的一些事情,从最简单到实施再到最困难:

  1. 如果所有数据都是XML格式,则将nvarchar更改为XML列。我相对肯定这不会对你的表现产生明显的影响,但它是下一步的基础。

  2. 实现XML索引。查看在线书籍了解详情

  3. 如果您要查询的属性已修复,那么您可能需要继续将它们分解为固定的表格格式。 SQL Server更喜欢SQL; XML和XQuery应该用于临时探索和/或变革工作。