次のような構造を持つ 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 スキーマを列に適用すると、大きな違いが生じるでしょうか?