IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

[Optimisation] Operation sur tous les tuples


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Par défaut [Optimisation] Operation sur tous les tuples
    Bonjour,

    J'aimerai savoir si ma méthode est bonne, elle marche mais je sais pas si c'est la meilleurs,

    Voila, j'ai une requete qui me retourne une liste de numéro : NUM
    et je dois effectuer des opérations sur tous ces numéros.
    J'ai donc fais une table temporaire qui contient tous les numéros et je boucle dessus selon l'algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    NOMBRE_OPERATION = select count(*) tempTable
    while @NOMBRE_OPERATION != 0
    begin
    -- Je recupere un numero
    	set rowcount 1
    	select @NUM = NUM from tempTable	
    	set rowcount 0
     
    -- Traitement....
     
    -- Fin de traitement, je decremente le compteur et je supprime la ligne qui viens d'etre traité
    delete from tempTable where NUM=@NUM	
    select @NOMBRE_OPERATION = @NOMBRE_OPERATION - 1
    end

    Merci

    PS : C'est pour eviter les curseurs

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    On cherche à éviter les curseurs en ecrivant l'opération sous une forme ensembliste, et de laisser l'optimiseur du SGBD trouver le meilleur chemin pour exécuter l'opération.

    Si un processing itératif est requis alors un curseur est probablement équivalent (ou peut-être un peu plus efficace) qu'une boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while @id > 0
    begin 
    .........
        select @id = min(id) from temptable
    end
    J'ai vu des problèmes de locks avec les curseurs en 11.9.2 il y 7 ou 8 ans (un curseur READ ONLY ne relachait pas les verrous sur certaines tables), mais en 12.x ou en 15 il ne devrait pas y avoir de problème de ce genre. Il n'y a donc pas de raison de ne pas les utiliser si un processing itératif est inévitable (l'ecriture de l'opération sous forme ensembliste étant à priori à favoriser).

    Michael

  3. #3
    Membre éclairé Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Par défaut
    Ok, alors j'effectue bien le bon process?
    As tu oublié de supprimer le champ dans ton code? ou ce n'est pas la peine (je pense que oui, sinon tu aura toujours le meme id ^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete from temptable where id=@id
    select @id = min(id) from temptable
    Merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Ton code est correcte. Mon code n'était là que pour faire l'illustration (et est effectivement incorrecte !)

    Michael

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. optimiser code sql access par boucle sur tous les chkbox
    Par thiefer dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/09/2008, 21h46
  2. TXMLDocument, ne fonctionne pas sur tous les PC
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/10/2005, 22h33
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo