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

Requêtes et SQL. Discussion :

[Performance] RecordCount ou select Count(champ) ? [Débat]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut [Performance] RecordCount ou select Count(champ) ?
    Salut, je voudrais avoir vos opinion sur la facon de faire la plus rapide
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim rs as recordset
    set rs = currentdb.openrecordset("table", dbopendynaset)
    rs.movelast
    msgbox rs.recordcount
    rs.close
    set rs = nothing
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim rs as recordset
    set rs = currentdb.openrecordset("select count(champ) from table", dbopendynaset)
    msgbox rs("champ")
    rs.close
    set rs = nothing
    merci
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 82
    Points : 78
    Points
    78
    Par défaut
    en lisant , je dirais la deuxieme solution

  3. #3
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    La logique voufrait que l'option 2 soit la plus performante.
    1. Tu fais ton curseur .... Tu fais Movelast ... Tu interroges
    2. Tu fais ton curseur Count ... Tu interroges

    Tu peux pas ajouter un
    avant et après pour voir même si je pense que la différence doit être insignifiante à moins d'avoir des gros volumes de données ce qui est déconseillé en access.

    Enfin ça m'interesse aussi si quelqu'un en sait plus.
    A lire avant de poster
    Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton

  4. #4
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    je viens de trouver ceci
    Parce qu'avec certains types de curseurs, la propriété Recordcount n'est pas valorisée automatiquement. Vous devez dans ce cas appeler tout d'abord la méthode movelast afin de vous placer sur le dernier enregistrement, puis appeler la méthode movefirst pour vous replacer sur le premier enregistrement, si nécessaire. Après un appel à movelast, recordcount contiendra la bonne valeur.

    Pour éviter d'avoir à faire cette opération, privilégiez les curseurs "static" (cursorType = adOpenStatic) ou keyset (cursorType = adOpenKeyset). Enfin, si votre but est uniquement de déterminer si votre recordset contient des enregistrements ou pas, préférez l'utilisation de la propriété eof juste après l'ouverture du recordset.
    alors je vais tester ca à mon bureau
    dautre opinion sur le sujet ?
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    Par défaut
    Salut,

    En fait moi aussi hier j'ai lu un article comme ça et avec Fred G. on aurait voulu savoir le fin de l'histoire concernant l'efficacité du recordcount

    je mets juste le lien du topic : http://www.developpez.net/forums/viewtopic.php?t=229308
    L'informatique est une science exacte au comportement aléatoire.

  6. #6
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    ouais j'ai lu le topic ce matin

    mais jaime pas trop l'idée de faire un movelast pour savoir le nb d'enreg... une opération inutile à mes yeux alors perso je crois que la requête sql est mieux et en plus on met pas en mémoire tous les champs de la table avec leur type (à cause du openrecordset("table")).

    sauf que mon orgueil... ce ne lui tente pas vraiment de revoir tous les codes
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    Par défaut
    en parlant d'orgueil, quand j'ai fait cette découverte, bin je m'ensuis voulue car avant j'étais innocente et naïve et donc si un problème se produisait je n'aurai pas pu m'en vouloir tandis que maintenant oui...

    Mais bon ca ne m'epechera pas de dormir quand même et je vais prier pour ne jamais y etre confrontée
    L'informatique est une science exacte au comportement aléatoire.

  8. #8
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Moi je trouve ça très clair :

    Citation Envoyé par F1
    La propriété RecordCount n'indique pas le nombre d'enregistrements contenus dans un objet Recordset de type Feuille de réponses dynamique (Dynaset), Instantané (Snapshot) ou En avant seulement tant que vous n'avez pas eu accès à tous les enregistrements.
    Citation Envoyé par F1
    Note L'utilisation de la méthode MoveLast pour remplir un objet Recordset que vous venez d'ouvrir a un impact négatif sur les performances. À moins que vous ayez besoin d'une valeur de propriété RecordCount précise dès l'ouverture d'un objet Recordset, il est préférable d'attendre que l'objet Recordset soit rempli avec d'autres portions de code avant de vérifier la propriété RecordCount.
    Donc, a mon avis, orgueil ou pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim rs as DAO.recordset 
    set rs = currentdb.openrecordset("select count(champ) from table", dbopendynaset) 
    msgbox rs("champ") 
    set rs = nothing
    (\ _ /)
    (='.'=)
    (")-(")

  9. #9
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    salut fred.g, je savais que tu finirait par dire ton mot

    moi aussi je crois que la requête est plus rapide.

    je vais mettre résolu sauf que si d'autre personne à des opinions.. elles sont les bienvenues
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Maintenant.... des chiffres ...
    Hello,

    Je me suis "amusé" à mesurer les temps de réponse des différentes méthodes de comptage sur une même requête assez "importante" (pour minimiser les erreurs de chrono )
    (Je ne suis PAS un psychopathe )

    Bilan:

    La plus rapide est bien la méthode "Select Count" (t secondes)

    en 2ème position: la méthode DCOUNT (pourtant outsider à priori) (t+1 secondes)

    La plus lente : le méthode "MoveLast - RecordCount" (t+2 secondes)

    donc les écarts sont plutôt faibles mais globalement c'est pas rapide rapide ...

    PS : Merci pour ce forum qui m'a souvent sorti de la m.....

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/11/2012, 19h43
  2. Réponses: 2
    Dernier message: 18/10/2010, 13h48
  3. [AC-2003] Select count(distinct champ) impossible
    Par js8bleu dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/01/2010, 10h13
  4. [Java][debutant]select count(*) ne retourne rien !!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/01/2007, 11h39
  5. résultat de " select count "
    Par marie253 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2004, 12h07

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