2つのテーブルがXMLtable
ありfilterTable
ます。
のデータに含まれるすべてのXMLtable.ID
値が必要です。その内容はで一致します。XMLtable
Col_X
MyElement
filterColumn
filterTable
の各行のXMLには複数の'Col_X
が含まれている可能性があり、これらの要素のいずれかが。の値のいずれかと一致する場合に備えて必要です。MyElement
ID
filterColumn
問題は、これらの列が実際にはvarchar(max)
データ型であり、テーブル自体が巨大である(50GBの巨大なように)ことです。したがって、このクエリは可能な限り最適化する必要があります。
これが私が今いる場所の例です。これは、最初に一致する要素が探している要素の1つと等しい行を返すだけです。さまざまなエラーメッセージが多数あるため、これを変更して、同じ名前の要素すべてと比較することはできないようです。
SELECT ID,
CAST(Col_X AS XML).value('(//*[local-name()=''MyElement''])', N'varchar(25)')
FROM XMLtable
...そして結果をと比較しますfilterTable
。これにはすでに5分以上かかります。
私が達成しようとしているのは、次のようなものです。
SELECT ID
FROM XMLtable
WHERE CAST(Col_X AS XML).query('(//*[local-name()=''MyElement''])')
IN (SELECT filterColumn FROM filterTable)
私が現在これを達成できる唯一の方法は、LIKE演算子を使用することです。これには、1000倍の時間がかかります。
さて、明らかに、列のデータ型などの変更を開始するオプションはありません。これは私が取り組まなければならないものです。:)