Pb de performance requete sql

Résolu
cs_loic72 Messages postés 18 Date d'inscription vendredi 4 novembre 2005 Statut Membre Dernière intervention 1 août 2007 - 3 mai 2006 à 15:09
cs_loic72 Messages postés 18 Date d'inscription vendredi 4 novembre 2005 Statut Membre Dernière intervention 1 août 2007 - 3 mai 2006 à 16:40
Bonjour,

j'ai un problème de temps d'exécution de requète et je vois pas d'ou ça viend.

req = "select ajus_id,ajus_montant_alloue,ajus_montant_alloue_prec from ajustement"
set rs = connexion.execute(req)
while not rs.eof
   id_ajus=rs.fields(0) 
   difference = rs.fields(1)-rs.fields(2)
 
   if difference<0 then
     difference=0
   end if
  
   req2 = "update ajustement set ajustement.ajus_difference='"&difference&"'  where ajustement.ajus_id="&id_ajus&""
   connexion.execute(req2)
   rs.movenext
 wend
rs.close

La table "ajustement " fait 85.000 entrées; savez-vous pourquoi SVP ça met autant de temps?
Est-ce du au fait que je modifie la ligne que je lui en meme temps? si c'est ça alors comment faire au mieux?
(pour info, je code en ASP)

8 réponses

cs_loic72 Messages postés 18 Date d'inscription vendredi 4 novembre 2005 Statut Membre Dernière intervention 1 août 2007 1
3 mai 2006 à 16:26
euh... non lol, pour la deuxième c'etait ça:

WHERE (ajus_montant_alloue-ajus_montant_alloue_prec) > 0

ajus_difference n'est pas encore mis à jour, n'existe pô

MERCI beaucoup !
+
3
cs_Ry_Yo Messages postés 9 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 mai 2006 1
3 mai 2006 à 15:38
Je pense qu'il est préférable de faire un update par lot que 85.000 update....


la requête devrait être quelque chose de ce genre :


UPDATE ajustement SET ajus_difference = CASE WHEN
ajus_montant_alloue-ajus_montant_alloue_prec > 0 THEN
ajus_montant_alloue-ajus_montant_alloue_prec ELSE 0 END


Une seule requete qui est normalement plus rapide que tes 85.000 update
0
cs_loic72 Messages postés 18 Date d'inscription vendredi 4 novembre 2005 Statut Membre Dernière intervention 1 août 2007 1
3 mai 2006 à 16:09
je ne connaissais pas cette facon de prcéder mais c'est net que ça doit aller plus vite.
seulement la syntaxe n'est pas bonne apparement. j'ai une erreur
tu es sur que c'est comme ça END CASE à la fin rien n'y fait.
la condition ne doit-elle pas se mettre entre le case et le when?
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
3 mai 2006 à 16:14
Ca :
UPDATE ajustement SET ajus_difference =  0
WHERE (ajus_montant_alloue-ajus_montant_alloue_prec) <= 0

puis :
UPDATE ajustement SET ajus_difference = (ajus_montant_alloue-ajus_montant_alloue_prec)

WHERE ajus_difference > 0

Ca t'évitera le case...

Mindiell Software
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
3 mai 2006 à 16:18
pour la 2eme :
WHERE ajus_difference <> 0
c'est mieux en fait... ^^

Mindiell Software
0
cs_Ry_Yo Messages postés 9 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 mai 2006 1
3 mai 2006 à 16:35
Juste pour revenir sur ma syntaxe,

Tu m'as mis le doute alors j'ai vérifié,  elle fonctionne sous SQLserver2000
0
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
3 mai 2006 à 16:36
Bonjour,
Votre problème de lenteur ne vient pas du moteur SQL, mais de la boucle que vous faite en ASP3 sur vos 85000 éléments.

Vous pouvez faire votre Update directement sur le moteur SQL.

Romelard Fabrice (Alias F___)
0
cs_loic72 Messages postés 18 Date d'inscription vendredi 4 novembre 2005 Statut Membre Dernière intervention 1 août 2007 1
3 mai 2006 à 16:40
ok
merci beaucoup pour vos conseils à vous tous.
0
Rejoignez-nous