2006 arrive a grands pas et depuis maintenant 4jours, nous avons décider de faire le grand nettoyage dans la base de données pour supprimer les donénes inutiles et optimiser les traitements. on a reussi à obtenir du 800% d'ameliorations sur certaines requetes qui n'etaient pas du tout optimisées.
Si certaines choses nous ont sauté aux yeux pour les ameliorer, ce n'est pas le cas pour toutes.
ainsi, cette requete repond parfaitement à son travail: pour chacun des douzes derniers mois, calculés les reglements recus par le gestionnaire: en somme, assez simple, ce qui donne d'apres l'ex-dba (qui n'en n'etait pas un)
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
SELECT     SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 11 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois1, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 10 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois2, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 9 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois3, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 8 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois4, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 7 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois5, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 6 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois6, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 5 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois7, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 4 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois8, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 3 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois9, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 2 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois10, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) - 1 THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois11, 
           SUM(CASE WHEN MONTH(dbo.T_REGLEMENT.rgt_date_reception) = MONTH(getdate()) THEN T_REGLEMENT_DETAIL.rgd_montant ELSE 0 END) AS mois12
FROM       T_REGLEMENT INNER JOIN
           T_REGLEMENT_DETAIL ON T_REGLEMENT.rgt_id = T_REGLEMENT_DETAIL.rgt_id INNER JOIN
           T_DOSSIER ON T_REGLEMENT_DETAIL.dos_id = T_DOSSIER.dos_id INNER JOIN
           T_PERSONNEL ON T_DOSSIER.prs_id = T_PERSONNEL.prs_id
WHERE     (dbo.T_PERSONNEL.prs_login = @Tg)
maintenant, humbles programmeurs que nous sommes aimerions l'optimiser (elle et plusieurs autres procedures). Je ne vais pas vous demander de les optimiser pour nous, nous allons devoir apprendre à le faire.

Nous avons utiliser l'analyser de requete compris dans SQL Server Studio (2005) qui nous sort un beau diagramme avec des hash, des select, du parallelism et plein d'autres grots mots barbares avec à chaque fois un pourcentage.
avec la requete ci-dessus, aucune "tache" ne prend plus de 10%cpu mais cela veut-il dire qu'elle est optimisée?
plus generalement, quelqu'un connait-il un livre, article, specifique, à la comprehension de l'analyseur de requete?


d'avance merci