代码之家  ›  专栏  ›  技术社区  ›  buckley

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

  •  2
  • buckley  · 技术社区  · 14 年前

    我们刚将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)
    

    查询采取 分钟 如果启用了这两个条件。

    如果你把下面的内容放在

    包含(档案版本。*,@freetext)

    它非常快。如果只是

    包含(档案版本本地化。*,@freetext)

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

    有人能告诉我这里发生了什么事吗?如果我使用联合(概念上与或相同),那么性能问题就不复存在了,但是我想知道我在这里遇到了什么问题,因为我想避免重写查询。

    问候,汤姆

    1 回复  |  直到 14 年前
        1
  •  1
  •   Community Ian Goodfellow    7 年前

    请看我对这些非常相似的问题的回答:

    其基本思想是,使用左联接到containstable(或freetexttable)比在WHERE子句中同时使用多个contains(或freetext)更好。