Мы только что обновили 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)
Поскольку мы присваиваем результаты или ожидаем результатов, я ожидаю, что время выполнения этого запроса будет меньше суммы, но, как указано выше, это занимает минуты / время.
Может кто-нибудь сказать мне, что здесь происходит? Если я использую объединение (которое концептуально совпадает с или), проблема производительности исчезнет, но я хотел бы знать, с какой проблемой я здесь сталкиваюсь, поскольку я хочу избежать переписывания запросов.
С уважением, Том