我有两个表:A和B,每个表都包含字符串。 当表A的字符串包含表B的字符串时,我需要找到表A和表B之间的所有匹配项(B.stringColumn是A.stringColumn的子字符串)。
我是使用CHARINDEX()
函数通过以下代码完成的:
SELECT *
FROM A, B
WHERE CHARINDEX(B.stringColumn, A.stringColumn) > 0
有更有效的方法吗?
此表可能包含大量数据,这就是我提出这个问题的原因。
提前致谢, Nuriel
答案 0 :(得分:2)
我更倾向于将其称为:
SELECT *
FROM A JOIN
B
ON A.stringColumn LIKE '%' + B.stringColumn + '%';
唉,这根本没有帮助。问题是在字符串中间查找模式不能使用优化或任何其他技术。您仍然坚持使用嵌套循环连接算法。
在某些情况下,您可以使用full text index。在两个表之间进行连接时,这可能会有点挑战。
此问题有一个技术解决方案。它涉及建立在称为n-gram(例如,3个字符组合)的东西上的索引。但是,SQL Server不支持此索引类型。
答案 1 :(得分:0)
嗯,你可以使用LIKE运算符。这可能不会给你一些重要的性能升级,但它有可能使用索引(如果该列上有索引),而使用where子句中的函数,将永远不会使用索引。