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

Développement SQL Server Discussion :

Optimisation d'une requête / sous requête


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Optimisation d'une requête / sous requête
    Bonjour,

    Je souhaiterais avoir un conseil pour optimiser une requête.

    J'ai une table TBL_ARTICLE
    Et une vue VUE_ARTICLE_TOTAUX qui fait différents totaux sur cette table en jointure avec d'autres.
    Je suis obligé de faire une jointure externe sur cette vue et ne peux utiliser simplement des GROUP BY car cela a un gros impact sur la requête utilisée avec Crystal Report.

    J'ai remarqué que si je fais une jointure externe du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 
     
    a.articleID,
    a.COL1 ,
    t.TOT1,
    t.TOT2,
    t.TOT3 
    from TBL_ARTICLE a 
    left outer join VUE_ARTICLE_TOTAUX t on a.articleID = t.articleID
    c'est beaucoup beaucoup plus long que si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 
     
    a.articleID,
    a.COL1 ,
    TOT1 =(select TOT1 from VUE_ARTICLE_TOTAUX t where a.articleID = t.articleID) 
    TOT2 =(select TOT2 from VUE_ARTICLE_TOTAUX t where a.articleID = t.articleID) 
    TOT3 =(select TOT3 from VUE_ARTICLE_TOTAUX t where a.articleID = t.articleID) 
     
    from TBL_ARTICLE a

    J'imagine qu'il existe un moyen de ne pas faire les 3 select différents pour récupérer les valeurs de la vue mais je ne trouve pas comment.

    Merci pour votre aide.

    Bonne journée

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Difficile de dire ce qui cloche sans le DDL de la table et ses index.
    Dans le premier cas il doit y avoir une lecture complète de table, et dans le deuxième un Clustered Index Seek.
    Extrayez le plan de requête si cela vous est possible.

    @++

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Merci pour la réponse.

    Mais la question est plutôt : Puis-je récupérer les 3 valeurs de ma sous requête en une seule fois sans passer par une jointure externe et sans avoir à récupérer mes 3 valeurs une à une ?

    Merci.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Certainement, mais il faut voir par quoi est générée la lenteur de la première expression de la requête.

    @++

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/10/2013, 16h38
  2. Réponses: 7
    Dernier message: 14/03/2013, 00h19
  3. Réponses: 2
    Dernier message: 18/05/2010, 11h31
  4. Sous requête sous une version de mysql inférieur à 4.1
    Par YagamiLight dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/06/2007, 23h16
  5. Sous-requête sous mysql 3
    Par photorelief dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/06/2006, 11h16

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