Bonjour à tous.tes,
J'ai mis ce titre là parce que je ne savais pas quoi mettre d'autre.
En fait je me demande ce qui peut faire que l'exécution d'une procédure stockée devienne de plus en plus lente en cours d'exécution.
Elle met en oeuvre un cursor qui boucle dans un deuxième.
En clair, ou pas, le premier boucle sur un SELECT de lignes d'entête.
Chaque ligne de ce premier cursor sert de clé au deuxième cursor qui SELECT un ensemble de lignes liées par ID à l'entête.
Un nouvel ID est affecté à l'enreg du premier CURSOR et est donc UPDATé dans tous les enreg du deuxième cursor, qui sont ensuite INSERTés dans une table. Puis l'enreg du premier cursor est INSERTé dans une autre table.
Ni plus ni moins qu'un système d'historisation.
Le premier boucle sur plusieurs dizaines de milliers de lignes, et le deuxième sur plusieurs centaines de milliers de lignes.
Donc, c'est long. Mais mon questionnement concerne le fait que, au fur et mesure du traitement, celui-ci est de plus en plus long.
En effet, le nombre de lignes "détail" par ligne "principales" est en moyenne le même. Le traitement des premiers enregs sont très rapide, et les derniers sont beaucoup plus lents, et de plus en plus lents pendant le traitement.
D'où ma question :
Ne serait-il pas possible de faire une opération quelconque, par exemple après chaque INSERT, pour maintenir le même niveau de performance tout au long du traitement ?
Est ce nécessaire de préciser le SGBD ? Ou le problème, comme je le pense, est inhérent à tous les SGBD.
Merci d'avance pour vos observations et, au-moins, d'avoir lu jusqu'au bout![]()
Partager