SQL Server 2008中的全文本搜索(FTS)查询极其缓慢当一个以上的CONTAINSTAB

2019-09-17 07:16发布

SQL Server 2008中的全文本搜索(FTS)在这种情况下极其缓慢:

问题1:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table1**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...]

结果:2005年SQL和SQL 2008年超级快

问题2:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table2**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...]

结果:2005年SQL和SQL 2008年超级快

问题3:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table1**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id) 
**OR EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table2**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...]

结果:超快速的SQL 2005(大约一秒钟), 但速度极慢(3分钟+)于2008年SQL

我所知道的与SQL 2008 FTS(甚至计算器)的性能问题,但还没有找到任何合理的解决方案呢。

Answer 1:

你可以重写查询3〜

SELECT ... WHERE EXISTS ... CONTAINSTABLE(Table1...)
UNION
SELECT ... WHERE EXISTS ... CONTAINSTABLE(Table2...)
ORDER BY ...

UNION ALL可能比UNION快,但可能导致重复的记录。



Answer 2:

你可能会得到一个不错的计划。 如果你可以发布计划,这将有助于诊断问题。 在情况不好的加入是选择,你可以使用查询提示来解决问题。



Answer 3:

我们刚刚升级到SQL 2008,跑进这个问题。 我发现,如果我把这个在查询的底部,这对我来说真是棒极了:OPTION(MAXDOP 1)



文章来源: SQL Server 2008 Full-Text Search (FTS) extremely slow when more than one CONTAINSTABLE in query