我们在 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 模式应用于列会产生显着差异吗?