Полнотекстовый запрос занимает минуты, а не секунды после обновления - PullRequest
2 голосов
/ 25 августа 2010

Мы только что обновили 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)

Запрос занимает минут , если включены оба условия.

Если вы просто поместите следующее в where

СОДЕРЖИТ (DOSSIER_VERSION. *, @ FREETEXT)

Это супер быстро. То же самое касается случая, если его просто

СОДЕРЖИТ (DOSSIER_VERSION_LOCALISED. * @ FREETEXT)

Поскольку мы присваиваем результаты или ожидаем результатов, я ожидаю, что время выполнения этого запроса будет меньше суммы, но, как указано выше, это занимает минуты / время.

Может кто-нибудь сказать мне, что здесь происходит? Если я использую объединение (которое концептуально совпадает с или), проблема производительности исчезнет, ​​но я хотел бы знать, с какой проблемой я здесь сталкиваюсь, поскольку я хочу избежать переписывания запросов.

С уважением, Том

1 Ответ

1 голос
/ 25 августа 2010

См. Мои ответы на эти очень похожие вопросы:

Основная идея состоит в том, что использование LEFT JOINs для CONTAINSTABLE (или FREETEXTTABLE) работает значительно лучше, чем объединение нескольких CONTAINS (или FREETEXT) OR вГДЕ оговорка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...