我有两张桌子,XMLtable
和filterTable
。
我需要其中数据包含的所有XMLtable.ID
值,其中的内容与.XMLtable
Col_X
MyElement
filterColumn
filterTable
中每一行的 XMLCol_X
可能包含多个MyElement
's,ID
如果这些元素中的任何一个与filterColumn
.
问题是这些列实际上是varchar(max)
数据类型,并且表本身很大(比如 50GB 巨大)。所以这个查询需要尽可能的优化。
这是我现在所在位置的示例,它仅返回第一个匹配元素等于我正在寻找的元素之一的行。由于过多的不同错误消息,我似乎无法将其更改为与我想要的所有相同命名的元素进行比较。
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 运算符,这需要大约一千倍的时间。
现在,显然它不是开始更改列的数据类型或其他任何东西的选项。这是我必须处理的。:)