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 :

Optimisation du group by


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut Optimisation du group by
    J'ai une requete sur plusieurs tables qui me renvoie environ 60 000 enregistrements.
    J'ai besoin d'un group by pour éviter les redondances mais le temps d'exécution passe alors de quelques secondes à plusieurs minutes (voire plus)
    Existe-t-il une syntaxe pour optimiser le traitement lié au group by ?
    P.S: j'utilise sybase SQLAnywhere

  2. #2
    Membre expérimenté
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Par défaut Re: Optimisation du group by
    Citation Envoyé par Higgins
    J'ai une requete sur plusieurs tables qui me renvoie environ 60 000 enregistrements.
    J'ai besoin d'un group by pour éviter les redondances mais le temps d'exécution passe alors de quelques secondes à plusieurs minutes (voire plus)
    Existe-t-il une syntaxe pour optimiser le traitement lié au group by ?
    P.S: j'utilise sybase SQLAnywhere
    fais voir ta requête avec le group by

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    si c'est uniquement pour éviter des doublons , un group by n'est pas nécessaire , un simple DISTINCT suffit

    aussi, en cas de GROUP BY, si les colonnes le compasant sont numériques, c'est plus rapide

  4. #4
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut
    la requete est du type
    select z.champ1,z.champ2, z.champ3,(select sum(champ 4) from table6), y.champ5,y3.champ6
    from table1 Y key join table2 Y2 key join table3 Y3,table4 Z key join table5 X
    where x.date=y.date
    ....
    group by champ1,champ2,champ3,champ5,champ6

    La requete imbriquée n'a aucune incidence sur la rapidité (tps identique qu'elle soit là ou non)
    Tous les champs (12) sont numeriques sauf deux dates et une chaine

    L'expérience m'a montré que le distinct est aussi gourmand que le group by ( en général)

  5. #5
    Membre expérimenté
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Par défaut
    T'as bien des indexs pour tes jointures ?

    NB : merci de mettre les balises [code] dans le post précédent. On y verra plus claire

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    effectivement en terme de performances, c'est au cas par cas mais il n'y a pas de différences significatives entre les clauses GROU BY et DISTINCT

    dès lors, autant utiliser le DISTINCT pour sélectionner des valeurs distinctes et laisser le GROUP BY pour des fonctions d'aggrégat

    c'est plus lisible et plus maintenable à long terme

    aussi, il me semble que le seul gain de performance possible soit au niveau des jointures

    bonne chance

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Je ne connais pas les lock types dans ton sgbd, mais en SQL Server, quand je fais un select qui ne modifieras pas les donnees, je rajoute la clause

    ce qui elimine les backup on the fly au moment de l'interpretation.

    Une requete qui prend 10 secondes peut reduite a 2-3 secondes.

    Alors si j'etais toi, je ferais une recherche afin de savoir comment changer le lock type de ta requete dans ton outil.

  8. #8
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut
    Merci pour votre aide mais finalement j'ai résolu le pb en subdivisant ma requete en plusieurs sous requetes

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

Discussions similaires

  1. Optimisation requete group by
    Par Stef784ever dans le forum SQL
    Réponses: 6
    Dernier message: 25/02/2010, 18h27
  2. [group by] Optimiser une sous requete
    Par if_zen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2008, 17h15
  3. Job d'optimisation sous SQLServer 2000 - PRIMARY GROUP is full
    Par Romain.pelissier dans le forum MS SQL Server
    Réponses: 24
    Dernier message: 30/10/2007, 14h30
  4. optimisation en tps d'exécution sur GROUP BY
    Par vraipolite dans le forum Requêtes
    Réponses: 0
    Dernier message: 24/07/2007, 10h47
  5. Optimisation du GROUP BY
    Par hackrobat dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/03/2006, 15h43

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