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)
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.
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)
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![]()
Partager