On me crie dessus parce que ma Procédure stockée est un peu longue à s'éxécuter

Voilà une bestiole qui met 25 secondes à s'éxécuter pour afficher 4035 lignes. Question : Est-ce normal ? Quels peuvent être les éléments limitants ? Les types (varchar, text etc...) pourrait-ils être à l'origine de la lenteur d'éxécution ?

D'avance, merci pour vos éclaircicements

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SELECT	id_demande_demande_au_plan.id as id ,
id_demande_demande_au_plan.id_demande_reel as id_demande_reel,
id_demande_demande_au_plan.id_demande_au_plan as id_demande_au_plan,
formation_plan = CASE DemandesAuPlan.guide WHEN 1 THEN (SELECT titre FROM Formations WHERE DemandesAuPlan.id_formation = Formations.id_formation)	WHEN 0 THEN (SELECT titre FROM Formations_Demandes WHERE DemandesAuPlan.id_formation = Formations_Demandes.id_formation) ELSE ' ' END,
ISNULL(Plans_plan.nom,Plans.nom) as nom_plan,
libelle_etat = CASE ISNULL(id_demande_demande_au_plan.id_demande_reel,-1) WHEN  -1 THEN 'Au Plan' ELSE (SELECT libelle_etat from etat_demande where demandes.etat = Etat_demande.id_etat) END,
etat = CASE ISNULL(convert(varchar,id_demande_demande_au_plan.id_demande_reel),-1) WHEN -1 THEN '9' ELSE CONVERT(varchar(50),demandes.etat) END,
nom_user_plan = ISNULL((SELECT nom FROM Utilisateurs WHERE DemandesAuPlan.id_utilisateur = Utilisateurs.id_utilisateur),' '),
prenom_plan = ISNULL((SELECT prenom FROM Utilisateurs WHERE DemandesAuPlan.id_utilisateur = Utilisateurs.id_utilisateur),' '),
DemandesAuPlan.id_utilisateur as id_utilisateur_au_plan,				nbre_heures_plan = CAST(DemandesAuPlan.nbre_heures as Decimal(18,2)),
cout_pedagogique_plan = CAST(DemandesAuPlan.cout_pedagogique as Decimal(18,2)),				
titre = CASE Demandes.guide WHEN 1 THEN Formations.titre WHEN 0 THEN Formations_Demandes.titre ELSE ' ' END,
nbre_heures = CAST(Demandes.nbre_heures as numeric(18,2)),
cout_pedagogique = CAST(Demandes.cout_pedagogique as numeric(18,2)),		Demandes.id_utilisateur,
nom = ISNULL((SELECT nom FROM utilisateurs WHERE Demandes.id_utilisateur = Utilisateurs.id_utilisateur),' '),
prenom = ISNULL((SELECT prenom FROM utilisateurs WHERE Demandes.id_utilisateur = Utilisateurs.id_utilisateur),' ')
 
FROM id_demande_demande_au_plan 
LEFT JOIN Demandes ON id_demande_demande_au_plan.id_demande_reel = Demandes.id_demande 
LEFT JOIN DemandesAuPlan ON id_demande_demande_au_plan.id_demande_au_plan = DemandesAuPlan.id_demande 
LEFT JOIN Plans ON Demandes.id_plan = Plans.id_plan
LEFT JOIN Utilisateurs ON Demandes.id_utilisateur = Utilisateurs.id_utilisateur 
LEFT JOIN Utilisateurs AS Utilisateurs_Responsable ON Demandes.id_responsable = Utilisateurs_Responsable.id_utilisateur
LEFT JOIN Formations ON Demandes.id_formation = Formations.id_formation 
LEFT JOIN Formations_Demandes ON Demandes.id_formation = Formations_Demandes.id_formation 			
LEFT JOIN Plans as Plans_Plan ON DemandesAuPlan.id_plan = Plans_plan.id_plan 
LEFT JOIN Formations as Formations_Plan ON DemandesAuPlan.id_formation = Formations_plan.id_formation 
LEFT JOIN Utilisateurs as Utilisateurs_Plan ON DemandesAuPlan.id_utilisateur = Utilisateurs_plan.id_utilisateur 
LEFT JOIN Utilisateurs AS Utilisateurs_Responsable_plan ON  DemandesAuPlan.id_responsable = Utilisateurs_Responsable_plan.id_utilisateur
LEFT JOIN Formations_Demandes as Formations_Demandes_Plan ON DemandesAuPlan.id_formation = Formations_Demandes_plan.id_formation 
 
WHERE (Plans.Annee = @annee OR Plans_plan.Annee = @annee) 
 
ORDER BY id,nom_user_plan,prenom_plan,nom,prenom