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 MySQL Discussion :

fonction count en InooDB


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut fonction count en InooDB
    Bonjour,

    J'ai lu qu'il y avait un petit souci avec la fonction ci-dessous en InnoDb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) From maTable;
    Vu ici:
    http://dev.mysql.com/doc/refman/5.0/...trictions.html
    InnoDB does not keep an internal count of rows in a table because concurrent transactions might “see” different numbers of rows at the same time. To process a SELECT COUNT(*) FROM t statement, InnoDB must scan an index of the table, which takes some time if the index is not entirely in the buffer pool. If your table does not change often, using the MySQL query cache is a good solution. To get a fast count, you have to use a counter table you create yourself and let your application update it according to the inserts and deletes it does. If an approximate row count is sufficient, SHOW TABLE STATUS can be used. See Section 13.2.13.1, “InnoDB Performance Tuning Tips”.
    Je ne suis pas sure de tout comprendre... Est ce que cela veut dire qu'en utilisant des requetes de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Count(clefPrimaire) FROM maTable WHERE colone='toto';
    Il n'y a pas de problème?

    Je ne veux pas trop m'avancer mais je crois comprendre que:
    - COUNT(*) est plus rapide que COUNT(clefPrimaire)
    - COUNT(*) ne renvoie pas forcement la bonne valeur car il n'y a pas de table qui maintient un compteur (Tout ca pour permettre les transactions)

    Je ne sais plus quoi utiliser...

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    COUNT(*) est plus rapide que COUNT(clefPrimaire)
    Non

    COUNT(*) ne renvoie pas forcement la bonne valeur car il n'y a pas de table qui maintient un compteur (Tout ca pour permettre les transactions)
    Non, cela ne concerne que les performances

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut
    La différence se situe donc uniquement au niveau des performances?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    count(*) <=> count(PK) car une clé primaire est unique not null, count(*) s'appuie sur la PK.
    count(*) <> count(colonne) car count(colonne) ne compte pas les nulls.

    Citation Envoyé par Vilukariok Voir le message
    COUNT(*) ne renvoie pas forcement la bonne valeur car il n'y a pas de table qui maintient un compteur (Tout ca pour permettre les transactions)
    non, la phrase :
    InnoDB does not keep an internal count of rows in a table because concurrent transactions might “see” different numbers of rows at the same time.
    fait plutôt référence à Consistent Nonlocking Reads

Discussions similaires

  1. DBI fonction count()
    Par vodevil dans le forum SGBD
    Réponses: 2
    Dernier message: 21/04/2006, 12h53
  2. Une requête, deux tables, fonction COUNT
    Par Nerva dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/04/2006, 16h10
  3. Coupler les fonction COUNT et MAX
    Par Pascal Lob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/03/2006, 10h45
  4. fonction count dans des paramètres
    Par flo456 dans le forum ASP
    Réponses: 11
    Dernier message: 18/11/2005, 09h33
  5. Requête à plusieurs colonnes avec la fonction COUNT
    Par zigune dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2004, 11h43

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