2010-08-24 4 views
2

Nous venons de mettre à niveau SQL Server 2005 vers SQL Server 2008 R2 et nous avons remarqué des problèmes de performances. La requête ci-dessous était déjà lente mais maintenant, en 2008, elle expire. Nous reconstruisons si vous avez les deux conditions ont permis le catalogue pour vous assurer que son fraîchement préparé sur 2008La requête de texte intégral prend quelques minutes au lieu de secondes inférieures après la mise à niveau

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

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

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

La requête prend minutes.

Si vous venez de mettre ce qui suit dans le où

CONTIENT (DOSSIER_VERSION. *, @ FREETEXT)

Son super rapide. Idem pour le cas si son juste

CONTIENT (DOSSIER_VERSION_LOCALISED. *, @ FREETEXT)

Puisque nous OR'ing les résultats que je me attends à ce moment pour cette requête à exécuter pour être inférieure à la somme, mais comme indiqué ci-dessus, cela prend des minutes/fois.

Quelqu'un peut-il me dire ce qui se passe ici? Si j'utilise une union (qui est conceptuellement la même que la ou) le problème de performance est parti mais j'aimerais savoir quel problème je rencontre ici car je veux éviter de réécrire des requêtes.

Cordialement, Tom

+1

duplication possible de [Ajouter plus de recherches OR avec CONTAINS Apporte la requête à l'exploration] (http://stackoverflow.com/questions/2906812/adding-more-or-searches-with-contains-brings-query-to-crawl) –

Répondre