[algo] Optimisation code
Salut à tous,
Je fais appel aux grand pros d'algo!
Je travaille sur un script ASP qui attaque une base MS-SQL, et vu l'importance du nombre d'enregistrements, ce script met plus d'une heure à s'exécuter.
Etant donné que je l'ai développé seul, je n'ai pas l'esprit critique que des personnes extérieures au projet (vous ;-) )peuvent avoir. Alors si vous avez 2-3 conseils pour accélérer mon traitement, faites en part!
Merci d'avance.
Bon courage!
Je fais appel aux grand pros d'algo!
Je travaille sur un script ASP qui attaque une base MS-SQL, et vu l'importance du nombre d'enregistrements, ce script met plus d'une heure à s'exécuter.
Etant donné que je l'ai développé seul, je n'ai pas l'esprit critique que des personnes extérieures au projet (vous ;-) )peuvent avoir. Alors si vous avez 2-3 conseils pour accélérer mon traitement, faites en part!
Merci d'avance.
' On selectionne tous les numéros de fiche_produit, et pour chaque on recense dans chaque
' localisation combien de produits de ce type il existe.
query = "SELECT no_fiche_produit FROM fiche_produit"
RSfp.Open query, connexion, 3, 3
query = "SELECT no_localisation FROM localisation"
RSloc.Open query, connexion, 3, 3
nb = 0
while not RSfp.eof
while not RSloc.eof
query = "SELECT no_produit FROM produit WHERE no_localisation=" & RSloc("no_localisation") & " AND no_fiche_produit=" & RSfp("no_fiche_produit")
RSnb.Open query, connexion, 3, 3
cpt = RSnb.RecordCount
if cpt <> 0 Then
query = "INSERT INTO tdbord_historique (date_entree, quantite, no_fiche_produit, no_localisation) VALUES ('" & jour & "', " & cpt & ", " & RSfp("no_fiche_produit") & ", " & RSloc("no_localisation") & ")"
connexion.execute query
nb = nb+1
end if
RSnb.Close
RSloc.MoveNext
if nb mod 100 = 0 Then
Response.write(nb & " : " & query & "<BR/>")
Response.Flush()
end if
wend
RSloc.MoveFirst
RSfp.MoveNext
wend
RSfp.Close
Set RSfp = Nothing
RSloc.Close
Set RSloc = Nothing
Set RSnb = Nothing
Bon courage!
Fat_cartman, Ass-Kicked by ASP
4 réponses
-
salut
essais de trier tes données avant de les exploiter.
comme ça tu vas diminuer la complexité de ton algo et donc tu gagnera du temps. -
Je ne vois pas de tri possible, je dois recenser le nombre de produits par localisation.
As tu un tri en tete à me proposer??
Fat_cartman, Ass-Kicked by ASP
-
-
-
Contributeur@Utilisateur anonymej'aime pas trop lire du code vb (ou ressemblant), mais apparemment, tu veux le nombre de produits par localisation :
select l.no_localisation, count(p.no_produit) from localisation l, produit p where p.no_localisation = l.no_localisation group by l.no_localisation order by l.no_localisation ASC;
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
-
-
ContributeurPuis sinon si le nombre d enregistrements est vraiment important il devient util de faire un index....ca optimise les accés à mort ;-)
-
Merci aux participants, le plus proche est tafiscobar (respect), j'ai trouvé la solution en parrallele qui est :
SELECT localisation.no_localisation, produit.no_fiche_produit, COUNT(no_fiche_produit) FROM localisation, produit WHERE produit.no_localisation = localisation.no_localisation GROUP BY produit.no_fiche_produit, localisation.no_localisation ORDER BY localisation.no_localisation, produit.no_fiche_produit ASC
Requete tres bonne puisqu'elle ne me sort pas tous les no_fiche_produit dans les no_localisation dont le COUNT est égal à 0!
Donc seulement 4459 enregistrements à la place de.... 56000 au début....
Bonne journée à tous!
Fat_cartman, Ass-Kicked by ASP