Sql 加快文本搜索查询大型数据集
嗨,我希望有人能给我小费。下面有一个查询,用于过滤#TempLogins表中的详细信息字段。“详细信息”字段是一个文本字段,其中包含多种类型的文本字符串,有些URL包含“ResultID=5”等部分,这是ResultID搜索和ResultID搜索字段中包含的内容。带有“ResultID=5”等条目的记录是我试图筛选的记录 我的问题是,查询运行时间太长。TempLogin表大约有200K条记录,TempSearch表大约有80K条记录 任何关于如何重写或加速此查询的提示都将不胜感激Sql 加快文本搜索查询大型数据集,sql,sql-server,tsql,Sql,Sql Server,Tsql,嗨,我希望有人能给我小费。下面有一个查询,用于过滤#TempLogins表中的详细信息字段。“详细信息”字段是一个文本字段,其中包含多种类型的文本字符串,有些URL包含“ResultID=5”等部分,这是ResultID搜索和ResultID搜索字段中包含的内容。带有“ResultID=5”等条目的记录是我试图筛选的记录 我的问题是,查询运行时间太长。TempLogin表大约有200K条记录,TempSearch表大约有80K条记录 任何关于如何重写或加速此查询的提示都将不胜感激 enter c
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 + '%')
这是join版本,但问题是%将是表扫描
关于#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 + '%'
如果您可以解析ResultsTIDSearch和ResultsTIDSearch中的术语,然后在=上加入,您可以尝试
PATINDEX
。。有时它比快,比如%%
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
)
您在这些临时表上创建了哪些索引?您的查询计划是什么样子的?您在比较多少数据(如果没有存储多少数据的上下文,200k条记录毫无意义)?除了在黑暗中拍摄之外,任何人都无法提供太多的信息。但是本着在黑暗中拍摄的精神,您可能需要在#TempLogins.detail.google上创建索引,了解“覆盖索引”,并将它们添加到您的表中以进行此查询。@TabAlleman索引对类似%