Bonjour à tous,

J'ai un problème pour optimiser une requête, j'aurais besoin de vos lumière.
Sachant que je suis loin d'être expert dans l'administration de base de données...

J'essaie d'optimiser une requête toute simple, mais qui est très longue à s'exécuter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT     TOP (10) d_persos.nom, d_persos.prenom
FROM         d_persos LEFT OUTER JOIN
                      d_CV ON d_CV.id_perso = d_persos.id_perso
WHERE     CONTAINS(d_CV.Titre, '*test*') OR
                      CONTAINS(d_CV.chef, '*test*') OR
                      CONTAINS(d_CV.Lieu, '*test*') OR
                      CONTAINS(d_persos.nom, '"tes*"') OR
                      CONTAINS(d_persos.prenom, '"tes*"')
Cette requete met 24 secondes à s'afficher

Lorsque je scinde la requete en 2, c'est beaucoup plus rapide :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT     TOP (10) d_persos.nom, d_persos.prenom
FROM         d_persos LEFT OUTER JOIN
                      d_CV ON d_CV.id_perso = d_persos.id_perso
WHERE     CONTAINS(d_persos.nom, '"test*"') OR
                      CONTAINS(d_persos.prenom, '"test*"')
La requete s'exécute immédiatement (0 secondes)

et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT     TOP (10) d_persos.nom, d_persos.prenom
FROM         d_persos LEFT OUTER JOIN
                      d_CV ON d_CV.id_perso = d_persos.id_perso
WHERE     CONTAINS(d_CV.Titre, '*test*') OR
                      CONTAINS(d_CV.chef, '*test*') OR
                      CONTAINS(d_CV.Lieu, '*test*')
La requete s'exécute également instantanément (0 secondes)

Un perso est lié à plusieurs éléments dans la table d_cv
Il y a 17000 enregistrements dans la table d_persos et 345000 dans la table d_CV

J'ai fait un catalogue de texte intégral pour tous les champs concernés (titre, chef, lieu de d_cv et nom, prenom de T_persos)

Je suis sous SQL Server 2008.

Est ce que quelqu'un aurait une piste ?

Cordialement,

matche