升级后,全文查询需要几分钟而不是几秒

时间:2010-08-24 21:58:10

标签: sql-server full-text-search

我们刚刚将SQL Server 2005升级到SQL Server 2008 R2,并发现了一些性能问题。 下面的查询已经很慢,但现在在2008年,它只是超时了。我们重建目录以确保其在2008年新制作

DECLARE @FREETEXT varchar(255)='TEN-T'

select  Distinct ...
from
    DOSSIER_VERSION 
    inner join
    DOSSIER_VERSION_LOCALISED ...
where

    CONTAINS(DOSSIER_VERSION.*,@FREETEXT) 
or 
    CONTAINS(DOSSIER_VERSION_LOCALISED.*,@FREETEXT)

如果您同时启用了这两个条件,则查询将分钟

如果您只是将以下内容放在

CONTAINS(DOSSIER_VERSION。*,@ FREETEXT)

它超级快。如果只是

,情况也是如此

CONTAINS(DOSSIER_VERSION_LOCALISED。*,@ FREETEXT)

由于我们正在测试结果,我希望此查询的运行时间小于总和,但如上所述,它需要几分钟/几次。

谁能告诉我这里发生了什么?如果我使用一个union(它在概念上与or相同),性能问题就消失了,但我想知道我在这里遇到了什么问题,因为我想避免重写查询。

问候,汤姆

1 个答案:

答案 0 :(得分:1)

请参阅我对这些非常相似的问题的答案:

基本思想是使用LEFT JOIN到CONTAINSTABLE(或FREETEXTTABLE)比在WHERE子句中将多个CONTAINS(或FREETEXT)ORed一起表现要好得多。