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

PHP & Base de données Discussion :

COUNT * vs mysql_num_rows [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut COUNT * vs mysql_num_rows
    Bonjour,

    Juste par soucis d'optimisation, j'aimerai savoir quelle est la différence entre faire
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_num_rows(mysql_query(SELECT * FROM...));
    pour compter le nombre d'enregistrements.
    Sachant que la table peut contenir 8000 enregistrements, laquelle des deux solutions est la plus optimale et pourquoi ?

    Merci pour vos réponses

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    avec "SELECT *" MySQL envoie tous les enregistrements (avec tous les champs puisque tu as mis "*") et PHP compte les enregistrement
    alors qu'avec "SELECT COUNT(*)" c'est MySQL qui compte et qui envoie juste le nombre d'enregistrements à PHP. donc cette solution est beaucoup plus rapide puisque le transfert de données entre PHP et MySQL consomme beaucoup de ressources

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Salut, je serais tenté de dire que les deux utilisations sont assez différentes....

    Le count te permet de compter des trucs groupés par quelque chose (très clair ).

    Le mysql_num_rows te permet juste de savoir combien de lignes ont été retournées...

    En gros, si tu as une table Animaux, que tu veux savoir combien de chiens et de chats tu as, le code suivant te sera utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(type) FROM animaux GROUP BY type
    Il te renverra :
    Chien : 18
    Chat : 76


    Par contre si tu veux juste savoir combien tu as d'animaux, un mysql_num_rows sera plus approprié (enfin... selon moi)...
    Par contre, attention, je vois que tu fais un SELECT * FROM ...., fait plutot un SELECT id FROM ...
    Je prends id comme exemple mais en gros un trucs assez petit.... donc plus rapide à être renvoyé par MySQL, sinon tu va lui demander de renvoyer tout tes champs juste pour compter le nombre de lignes...

    En espérant t'avoir eclairé !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut
    Citation Envoyé par mathieu Voir le message
    avec "SELECT *" MySQL envoie tous les enregistrements (avec tous les champs puisque tu as mis "*") et PHP compte les enregistrement
    alors qu'avec "SELECT COUNT(*)" c'est MySQL qui compte et qui envoie juste le nombre d'enregistrements à PHP. donc cette solution est beaucoup plus rapide puisque le transfert de données entre PHP et MySQL consomme beaucoup de ressources
    Ok, mais si je fais un "SELECT COUNT(id)" l'information à transmettre sera plus petite. Et donc compter avec PHP pourrait devenir plus rapide, non ?

    Par contre, j'ai lu (http://sqlpro.developpez.com/cours/optimiser/) que COUNT(*) était mieux que COUNT(id).
    Une dernière chose, si j'utilise la fonction COUNT, SQL comptera les enregistrements et donc la connexion avec le SGBD (Mysql) sera active tant qu'il n'a pas fini le compte.
    Or si je passe directement les ressources à PHP, la connexion avec le SGBD ne sera plus active, donc on consommera moins de mémoire.
    Est-ce bien vrai où j'ai oublié quelque chose ?

Discussions similaires

  1. [MySQL] mysql_num_rows Or count
    Par PIEPLU dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/03/2012, 12h30
  2. [MySQL] Requete count et mysql_num_rows
    Par sanaa16 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2008, 15h23
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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