|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Sebastien Inscription : mars 2011 Messages : 2 ![]() |
Bonjour à tous,
Debutant, je suis confronter à un probleme. Le temps de traitement de 350 000 lignes d'une table est horriblement long. j'ai une table tblNet avec des champs key, item, supplier, leadtime, qte J'ai 80 000 item/supplier et 250 000 key. Key correspond à la ligne de commande concatener avec le numero de commande. Je realise sur l'interface d'access une requete : en gros : pour chaque item et supp, je renvoie le resultat de deux fonctions fonction que j'ai realisé sous VBA DAO. je selectionne le champs item, supplier en group by puis sur la colonne suivante, j'applique les fonctions en substituant strItem par la valeur de l'item de la ligne de tblnet. Voici la 1ere fonction elles sont pas bien compliqué mais prenne un temps fou Code :
Code :
faire un tri et une boucle tant que?? A mon avis, les fonctions doivent s'executer 350 000 fois au lieu de 80000 fois Il faut que je prenne les bonnes habitudes maintenant. Merci de votre aide |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour seb7t1,
Il faut sans doute chercher un moyen de réduire le nombre des appels aux fonctions. — Existe-t-il un raisonnement qui te permettrait de déterminer a priori que le résultat des fonctions sera le même que celui de l’enregistrement précédent ? Tu pourrais ainsi trier au préalable et solliciter les fonctions chaque fois qu’un critère change. — Lorsque le calcul a été effectué, est-il définitif ? Je veux dire qu’il restera le même quelle que soit l’évolution du fichier dans l'avenir. Tu pourrais alors stocker le résultat dans une table. — Variante du précédent : trouver un critère qui permettrait de déterminer s’il est nécessaire de recalculer le résultat précédemment enregistré. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Sebastien Inscription : mars 2011 Messages : 2 ![]() |
Bonjour claude,
Merci pour ta reponse. Les calculs sont destinés à etre stocké dans une table pour etre reutilisé par la suite. Avec ton idée, si je fait un sub : J'ouvre un recordset en faisant un tri par item et supplier, Boucle tant que l'item et le supplier sont egaux d'un enregistrement à l'autre, j'applique les fonctions. Et je passe à l'autre item supplier? Est-il possible de stocker les donnée leadtime et qty de meme supplier et meme item dans une table temporaire pour ensuite calculer? Est-ce que cela reduire le temps? Faire un index sur item et supplier, est peut etre nécessaire? Qu'en pense-tu? |
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Citation:
On appelle la fonction lors de la 1re occurrence, on note le résultat, on applique ce résultat aux enregistrements suivants, jusqu'à ce que le couple change de valeur. ------------ Pour tes deux dernières questions, je ne suis pas compétent. J'essaierais pour constater le résultat. |
|
|
|
00
|
|
|
#5 |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Bonjour à tous,
En plus de la solution très judicieuse de Claude Il y a aussi la possibilité de faire des jointures entre tables ou requêtes sur des champs indexés (si possible) ou d'utiliser des sous-requête au lieu d'utiliser des fonctions. Bonne suite
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
10
|
Copyright © 2000-2012 - www.developpez.com