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 d'une requête


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 29
    Points : 22
    Points
    22
    Par défaut Optimisation d'une requête
    Bonjours à vous tous,
    J'ai une requête énorme qui doit être décomposée et optimisée, elle est de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Table.champ, REQ_1.CHAMPS_1, REQ_1.CHAMPS_2,... REQ_1.CHAMPS_X  , REQ_2.CHAMPS_1,...  REQ_N.CHAMPS_Y
    FROM 
            Left Join REQ_1 ON (COND_1)
            LEFT JOIN REQ_2 ON (COND_2)
            ...
            Left JOIN REQ_N.CHAMPS_M  (COND_N)
     
    WHERE Table.champ=.. ;
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Qu'est-ce qui ne va pas avec la requête actuelle ?

    Par contre sans le code complet ni le SGBD, il n'y a pas grand-chose que nous puissions faire ici.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    D'abord merci pour votre réponse,
    La requête actuelle est énorme, elle est très longue, et ils m'ont demandée de la décomposer et l'optimiser au maximum pour des raisons de lisibilité et maintenabilité.. le SGBD est MySQL.. et la forme générale de la requête est celle que j'ai écrit précédemment.. Je ne sais pas quoi faire ou par ou commencer!

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Simplification SQL ou problème de modélisation ?
    Bonjour,

    Votre requête me semble, au vu du peu d'information qu'on a, tout à fait "propre" en termes SQL.
    En effet, que des jointures simples, pas de case et autres fonctions coûteuses et indéchiffrables dans le select ni dans le where.

    En revanche, vos tables "REQ_1" ... "REQ_N" ne me plaisent pas trop.

    Ont elles la même structure ?

    Si oui, alors le suffixe me semble on ne peut plus foireux, et signe d'une erreur magistrale de conception/modélisation.

    Une unique table "REQ" devrait éxister, avec une colonne supplémentaire "N", correspondant aux valeurs de vos suffixes.

    Sinon, qui est ce "on" qui vous demande de simplifier votre code SQL ? Le concepteur du modèle des données ? Le même que celui qui a choisi MySQL comme SGBD-R ?
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Que des requetes outer, avec a priori un grand nombre de tables jointes et a priori aussi, toutes les colonnes de chacune des tables de la requete

    Si les tables ont des millions de lignes et/ou il y a beaucoup de tables jointes en outer et/ou les colonnes sont larges, il faut transporter beaucoup de données, le temps de traitement s'en ressent forcément, même avec des chemins d'accès optimisés.

    Vérifiez si toutes les colonnes transportées sont vraiment utiles, à commencer par les plus larges

    Ceci étant, sans savoir si le where est filtrant, sans le DDL des tables et index et sans les stats, difficile d'argumenter de façon plus détaillée

Discussions similaires

  1. Optimisation d'une requête
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/12/2005, 18h21
  2. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  3. Optimisation d'une requête patchwork
    Par ARRG dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/09/2005, 15h23
  4. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  5. [DB2] Optimisation d'une requête
    Par ahoyeau dans le forum DB2
    Réponses: 7
    Dernier message: 11/03/2005, 17h54

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