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 :

Optimisation du GROUP BY


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Par défaut Optimisation du GROUP BY
    Bonjour à tous, j'ai la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `tmpdonnees` (
      `id` int(11) NOT NULL auto_increment,
      `unite` varchar(10) default '0',
      `indicateur` varchar(4) default '0',
      `colonne` char(1) default '0',
      `nombre` double default '0',
      KEY `idx3` (`indicateur`),
      KEY `idx4` (`colonne`),
      KEY `idx` (`id`),
      KEY `idx2` (`unite`,`indicateur`,`colonne`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    J'ai plus d'un million d'enregistrements dans la base

    Et j'execute la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select *, sum(nombre) as somme from tmpdonnees group by unite,indicateur,colonne
    et la requete mets 6 minutes à s'executer,

    Quelle est la méthode ideale pour optimiser le group by ?

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Apparemment c'est déjà assez optimisé puisque tu as un index qui porte sur tous les éléments du GROUP BY.

    Pour faire un SUM, MySQL est obligé de passer en revue toutes les lignes et avec plus d'un million de lignes c'est normal si ça commence à être lent. Une solution pourrait être d'activer le query cache qui va garder en mémoire le jeu de résultats tant que les données sous-jacentes restent inchangées. Mais bon si les données de la table sont souvent modifiées ça ne servira pas à grand-chose...

    Donne-nous quand même le résultat d'un EXPLAIN SELECT ... \G pour voir

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut Re: Optimisation du GROUP BY
    Ca irait peut-être un petit peu plus vite (au conditionnel...) si à la place de VARCHARs tu avais des INTs (en gros, tes `unite`,`indicateur` et `colonne` serraient des clefs étrangères)

    En gros, tu aurais la chose suivante:
    - une réduction de la taille de ta table
    - les champs de ta table seraient de taille fixe (plus de VARCHAR)
    - des comparaisons effectuées sur des entiers et non plus des chaînes

    Il faudrait ensuite faire correspondre ces codes avec leur signification. Une jointure pourrait éventuellement prendre un peu de temps, mais tu peux toujours essayer. Eventuellement, tu peux envisager d'utiliser des ENUM.

    Maintenant, comme disait Maximilian, c'est vrai qu'à ce niveau cela devient dur d'optimiser.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

+ 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, 19h27
  2. [group by] Optimiser une sous requete
    Par if_zen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2008, 18h15
  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, 15h30
  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, 11h47
  5. Optimisation du group by
    Par Higgins dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/01/2004, 12h10

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