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

C# Discussion :

Requete SQL vs boucle For


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut Requete SQL vs boucle For
    Bonsoir

    je voudrais avoir votre avis.

    je suis en train de faire une application où j'utilise une base SQLce, j'affiche mes requêtes dans un datagridview.

    mais question est la suivante :

    sachant que ma base pourra avoir plusieurs milliers lignes (car suivi de production), que dans une colonne j'ai un code défaut (pièce conforme si code défaut = 0, et mauvaise si != 0) et que je souhaite compter le nombre de pièces bonnes et le nombre de pièces mauvaises.

    quelle sera la commande la plus rapide ? moins "gourmande" ?

    faire une boucle FOR et un test du contenu de chaque cellule de la colonne de défauts pour incrémenter mes compteurs ?
    ou bien faire 2 requêtes du style "SELECT * from maTable WHERE defaut = '0'" et "SELECT * from maTable WHERE defaut <> '0'" ?

    merci

    @++

    KaloOopS

  2. #2
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Bonsoir,

    Je suis pas une experte mais personnellement je ferais une requête de type
    SELECT COUNT(*) WHERE ...
    La fonction COUNT() se charge de compter le nombre d'enregistrements.
    Comme ça tout se fait directement dans ta base de données, probablement moins lourd qu'une incrémentation dans le programme.

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Moi aussi je pencherais fortement pour la requête.

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Le test mérite d'être fait et donnera gagnantes de très loin les requêtes.

  5. #5
    Membre très actif
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 457
    Par défaut
    moi je prefere de faire une requete SQL ,
    tu as tester le temps de reponse du requete et le temps du reponse du boucle for?

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Le test mérite d'être fait
    +1
    et donnera gagnantes de très loin les requêtes.
    Si tu as chargé toutes les données dans une Datable en mémoire bindée au dataGridView (et que tu utilises la propriété Filter du binding source pour afficher des extraits de la table), la boucle For sera me semble t'il plus efficace, surtout si le serveur est sur une autre machine.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut
    Bonjour

    pour utiliser StopWatch fallait-il le connaitre

    donc j'ai essayé ca sur mes 3 opérations (SELECT COUNT(*), SELECT *, boucle FOR (pour ceux qui prendraient le topic en cours )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                watch.Start();
     
                // ma tache ....
     
                watch.Stop();
                listBox1.Items.Add(watch.ElapsedMilliseconds.ToString());
    ben les chronos n'ont pas du tout les mêmes valeurs qu'avec ma différence entre DateTime, cette fois-ci c'est la requête SELECT COUNT(*) la plus rapide : entre 25 et 30 ms

    les autres taches sont sensiblement identiques et oscillent entre 90 et 100ms avec une requête SELECT * légèrement plus rapide de 2 ms

    bon ben si cette méthode est vraiment celle qui faut utiliser pour des chronos, vais utiliser celle-là ce sera toujours plus fiable.

    merci

    @++

    KaloOopS

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Intéressante cette discussion sur l'emploi des timer
    Le hazar fait que j'ai un problème connexe sur un device mobile
    Mais je vais ouvrir un autre sujet pour la cause "temps passé entre deux KeyPress"

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

Discussions similaires

  1. Boucle For dans une requete SQL
    Par laurent0 dans le forum Général Python
    Réponses: 2
    Dernier message: 10/08/2011, 17h41
  2. Boucle For & Requete SQL
    Par Friksstyle dans le forum Langage
    Réponses: 6
    Dernier message: 19/04/2011, 17h12
  3. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  4. Requete SQL dans boucle while
    Par vince_grenoblois dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 04/08/2006, 20h41
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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