嗨,我希望有人给我一个提示。我在下面有一个查询,它在#TempLogins表中过滤了详细信息字段。详细信息字段是一个文本字段,其中包含许多类型的文本字符串,其中一些包含具有“ResultID = 5”部分的URL,这些部分包含在ResultIDSearch和ResultSetIDSearch字段中。带有“ResultID = 5”条目的记录是我要过滤的记录。
我遇到的问题是查询运行时间太长而无法运行。 TempLogin表有大约200 K记录,TempSearch表有大约80 K记录。
有关如何重写或加快此查询的任何提示将不胜感激。
enter code here: select * from #TempLogins a where exists
(select 1 from #TempSearch t1 where
a.detail like '%' + t1.ResultIDSearch + '%'
or
a.detail like '%' + t1.ResultSetIDSearch + '%')
答案 0 :(得分:0)
这是连接版本,但问题是像%将是一个表扫描
#TempLogins.detail上的索引可能会有所帮助,但我对此表示怀疑
select distinct a.*
from #TempLogins a
join #TempSearch t1
on a.detail like '%' + t1.ResultIDSearch + '%'
or a.detail like '%' + t1.ResultSetIDSearch + '%';
这可能会做得更好
select a.*
from #TempLogins a
join #TempSearch t1
on a.detail like '%' + t1.ResultIDSearch + '%'
UNION
select a.*
from #TempLogins a
join #TempSearch t1
on a.detail like '%' + t1.ResultSetIDSearch + '%'
如果您可以从ResultIDSearch和ResultSetIDSearch中解析这些术语,然后加入=
答案 1 :(得分:0)
你可以尝试PATINDEX
..有时它比LIKE % %
SELECT
*
FROM
#TempLogins a
WHERE
EXISTS ( SELECT
1
FROM
#TempSearch t1
WHERE
PATINDEX('%' + t1.ResultIDSearch + '%', a.detail) > 0
OR PATINDEX('%' + t1.ResultSetIDSearch + '%', a.detail) > 0
)