[algo] Optimisation code

Fermé
Utilisateur anonyme - 25 juin 2004 à 13:54
 Utilisateur anonyme - 28 juin 2004 à 09:12
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.

' 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
A voir également:

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.
0
Utilisateur anonyme
25 juin 2004 à 15:00
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
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
25 juin 2004 à 16:02
salut, tu ne sais pas que t'as l'agregat count pour compter et group by pour regrouper ???
Ou bien j'ai rien compris ??

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
0
Utilisateur anonyme
25 juin 2004 à 16:33
Si si, y'a bien une histoire de COUNT, mais je ne l'utilise pas à cause de certains problemes liés au recordset. Mais je vais essayer quand meme quand ca aura fini de tourner....
T'as une proposition de requete, je te dirai si t'as bien compris ou pas.

Fat_cartman,
Ass-Kicked by ASP
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177 > Utilisateur anonyme
25 juin 2004 à 17:23
j'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!!!
0
Canard007 Messages postés 5929 Date d'inscription mercredi 26 mai 2004 Statut Contributeur Dernière intervention 18 septembre 2009 215
25 juin 2004 à 17:47
Puis sinon si le nombre d enregistrements est vraiment important il devient util de faire un index....ca optimise les accés à mort ;-)
0
Utilisateur anonyme
28 juin 2004 à 09:12
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
0