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 :
Cette requete met 24 secondes à s'afficher
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*"')
Lorsque je scinde la requete en 2, c'est beaucoup plus rapide :
La requete s'exécute immédiatement (0 secondes)
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*"')
et
La requete s'exécute également instantanément (0 secondes)
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*')
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
Partager