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

Langage SQL Discussion :

Distinct ou GROUP BY?


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 582
    Points : 218
    Points
    218
    Par défaut Distinct ou GROUP BY?
    Bonjour,
    POur la rapidité d'exécution : vaut-il mieux faire un group by ou un distinct?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Mbr.idU,Mbr.codeObjet FROM Membre Mbr GROUP BY Mbr.idU,Mbr.codeObjet
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Mbr.idU,Mbr.codeObjet FROM Membre Mbr

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ca c'est une question pour SQLPro !
    Je n'ai pas trouvé la réponse dans son article sur l'optimisation.
    Intuitivement, je dirais que le Distinct est mieux mais je suis loin d'être un expert.
    C'est à tester sur une grosse table.

    Dans le cas précis que tu proposes, j'ai l'impression que IdU est un identifiant, non ?
    Si c'est le cas, ta requête va te retourner toutes les lignes de la table et tu n'as même pas besoin du DISTINCT ou du GROUP BY !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut
    ce que je fais quand je ne trouve pas de réponses de ce genre je vais directement dans ma BDD et je fais le test car le temps de la requête s'affiche
    à toi de comparer pour la suite
    je pense que pour une petite base ça sera minime et dépendra du type et de la version de ta BDD
    donc a essayé sur une table plus conséquente

    EDIT : Je viens de tester sur une table qui contient 50000 entrées
    la requête est en moyenne moins rapide avec distinct mais c'est de l'ordre de la milliseconde
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je sais que contrairement à SQLPro, je suis un NINO...

    Cela dit, je peux te dire que les deux requêtes sont exactement les mêmes d'un point de vue performance !

    Si tu as la possibilité de faire des EXPLAIN PLAIN ou de tracer les opérations physiques / logiques réalisées, tu t'en rendras compte sans problème.

    Cela dit, d'un point de vue logique, je dirais que si ton but est juste d'éliminer les doublons, le DISTINCT est "mieux" : quand on utilise GROUP BY, c'est quand même souvent pour sortir des résultats d'agrégats...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 582
    Points : 218
    Points
    218
    Par défaut
    Non IdU est une clé externe.. donc j'ai bien besoin d'un distinct...
    J'ai effectivement vérifié et le plan d'exécution est identique...donc le même temps d'exécution
    Cela dit, d'un point de vue logique, je dirais que si ton but est juste d'éliminer les doublons, le DISTINCT est "mieux" : quand on utilise GROUP BY, c'est quand même souvent pour sortir des résultats d'agrégats...
    Effectivement, cela semble plus logique...

    merci pour vos réponses...

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

Discussions similaires

  1. DISTINCT ou GROUP BY
    Par Papy214 dans le forum Développement
    Réponses: 6
    Dernier message: 02/11/2011, 21h31
  2. Problème de distinct / Max / Group By
    Par Thony3351 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 11/07/2011, 13h09
  3. Réponses: 8
    Dernier message: 17/09/2009, 15h08
  4. DISTINCT versus GROUP BY
    Par SergioMaster dans le forum SQL
    Réponses: 5
    Dernier message: 01/04/2008, 07h43
  5. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10

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