alors je file en compta, le programme interroge mal une base de données: en gros un regroupement se fait mal.
je rentre au bureau, j'analyse les échanges entre le programme et la DB, trouve la procédure stockée incriminée. bon.
je procède au regroupement, ça roule! mais l'exécution prends tout de même 8 ( oui, huit ) minutes pour sortir les résultats.
Comment optimiser?
j'ai sorti le SELECT de la procédure et testé dans le SQL
8 minutes plus tard, j'élague une série de "case", qui sont peut être la source de la lenteur.
8 minutes plus tard ( c'était pas ça ), je vire un SELECT imbriqué.
3 secondes plus tard, je me rends compte que c'était ça.
Bon! mais alors, pourquoi est-ce que c'était lent?
je compte les lignes des tables:
_ tables principale: 750.000
_ table du SELECT imbriqué: 50.000
_ le reste des tables, c'est de la codification, des faibles volumes
ce SELECT mange des ressources, dû aux volumes des tables... alors comment y remédier?
je crée une table temporaire, en y insérant les données de base et un champ vide;
ensuite, je mets à jour un champ de cette table de quelques centaines de lignes avec la valeur de la table de 50.000.
10 secondes plus tard, ma solution est validée
pause café!
en résumer, pour résoudre une lenteur:
_ identifier la requete qui est lente
_ trouver pourquoi elle est lente ( volumes des tables? jointures? traitement des données? ... )
_ aboutir au résultat voulu par un moyen contournant le point noir
_ prendre un café
( _dire qu'on paie une SSII une fortune pour ce programme! ... ils pourraient au moins optimiser leur SQL!_ )
Bonne optimisation!
A+
Pascal