SQL XML - 存在:有更好的方法吗?

时间:2012-04-08 22:58:53

标签: sql xml rdbms

我们在SQL Server 2008 R2数据库的几个表中使用XML列和传统列,结构如下:

<bridging>
  <project id="43" source="true" />
  <project id="48" source="false" />
  <project id="99" source="false" />
  <project id="123" source="false" />
</bridging>

然后,我们使用WHERE子句中带有.exist XPath查询的存储过程从这些表中选择数据,如下所示:

SELECT  
    e.ID, 
    e.ProjectsBridge,
    e.Quantity, 
    e.Rate, 
    e.UOMID, 
    u.Name as UOM
FROM    
    tblEstimator e LEFT OUTER JOIN
    tblUnitOfMeasure u ON u.ID = e.UOMID
WHERE   
    (e.ProjectsBridge.exist('//bridging/project/@id[. = sql:variable("@ProjectID")]') = 1 OR 
     @ProjectID IS NULL) 

这对较小的数据集非常有效,但数据集越大,得到的速度越慢 - 上面的示例在数百万条记录的数据集上运行超过2分钟。

所以问题是,是否有更好,更快的方法来进行此查询?

将XML模式应用于列会产生显着的差异吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试一些事项:

在您的上下文中,CROSS APPLY也可能更有效:

SELECT e.ID 
FROM tblEstimator e
CROSS APPLY e.ProjectsBridge.nodes('/bridging/project') AS T(c)
WHERE T.c.value('@id', 'INT') = @ProjectId