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 :

Cardinalité et COUNT(DISTINCT x)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Cardinalité et COUNT(DISTINCT x)
    Bonjour,
    Je viens de découvrir une bizarrerie pour laquelle j'aimerais avoir une explication.
    Dans phpMyAdmin, une colonne indexée indique une cardinalité égale au nombre de lignes de la table, ce qui fait de cette colonne une clé candidate.
    Par contre, un SELECT COUNT(DISTINCT ..) de cette colonne donne un nombre inférieur !
    Vérification faite sur une partie des données, il y a effectivement plusieurs lignes pour une même valeur de cette colonne.

    Quelqu'un peut-il m'expliquer ce phénomène ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Salut Philippe !

    Est-ce qu'un ANALYZE TABLE règle le problème ?
    Quel est ton moteur de stockage ?
    Peux-tu nous donner le CREATE TABLE ?

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Non. ANALYSE TABLE a répondu OK de même que CHECK TABLE.
    On a supprimé l'index et recréé, le résultat est le même.
    Je ne peux donner ici le script de création de la table car elle comporte beaucoup de colonnes et elle est sur un autre ordi auquel je n'ai pas accès direct.

    La colonne en question est une varchar.

    Je crois avoir eu le même phénomène sur une autre table dans une autre base de données (mais à plusieurs dizaines de millions de lignes, j'hésite à relancer un SELECT COUNT(DISTINCT ...) ).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Quel est ton moteur de stockage ?

    Quelle est la collation de la colonne ?

    Est-ce qu'un SHOW INDEX te donne les mêmes chiffres que phpMyAdmin ?

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Moteur MyISAM
    Collation euh... j'ai pas fait gaffe et maintenant l'ordi est arrêté.

    En fait j'ai initié aujourd'hui mes collègues au concept de SGBDR (je leur ai servi du Merise ce matin ) à partir d'un fichier texte qu'on vient de recevoir et qu'il serait intéressant de modéliser parce qu'il fait 132 colonnes et plus de 2 millions de lignes.

    On a donc travaillé avec un extrait de 500 000 lignes du fichier et on a remarqué ce phénomène.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Pour la collation, c'est un peu une hyptohèse d'école (mais je n'ai pas d'autre idée en stock). Supposons que par exemple tu aies les valeurs suivantes :

    CinePhil
    CinéPhil
    cinephil
    Avec une collation insensible à la casse et aux accents, un COUNT DISTINCT te donnerait 1. Par contre, je ne sais pas trop comment serait calculée la cardinalité de l'index (en théorie, de la même manière, mais en pratique je n'en sais rien).

Discussions similaires

  1. [débutant] COUNT(DISTINCT ...)
    Par lennelei dans le forum Access
    Réponses: 5
    Dernier message: 21/08/2007, 09h39
  2. Pb requete count distinct
    Par jejedebeziers dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/05/2006, 18h04
  3. [Sql]Having Count ( Distinct )
    Par nuke_y dans le forum Oracle
    Réponses: 5
    Dernier message: 20/02/2006, 21h36
  4. [SGBDR ACCES97] COUNT & DISTINCT
    Par totoche dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/12/2005, 09h24
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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