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

MS SQL Server Discussion :

Optimisation de requete


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Optimisation de requete
    Bonjour,

    pour les besoins d'un projet sur lequel je travaille, je vais avoir besoin d'optimiser les requêtes utilisées. D'une manière générale nous ne souhaitons pas modifier le modèle de données (ce qui d'après ce que j'ai lu pourrait pourtant apporter un gain considérable). Tous les conseils généraux sont les bienvenus

    Dans un cadre plus particulier nous utilisons une requête de ce type:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    DECLARE @Date nvarchar(20) = '2012-11-06T00:00:00'  
    DECLARE @idLieu integer = 3986 
     
    SELECT    TSE.Id1,   TSE.2,  TSEJ.DtD,   TSR.Nom, TSS.Rg, TSR.CF,  TSR.TMR,   TSR.SMR,  TSR.L , TSE.idLD,
     
        (select Id
        from    
            (SELECT TOP (1) E.Id1, E.IdLA
                FROM  TSLR as LR 
            LEFT OUTER JOIN TSS as S ON LR.LRId = S.LRId 
            LEFT OUTER JOIN TSEJ as EJ ON S.EJId = EJ.Id 
            LEFT OUTER JOIN TSE as E ON EJ.EId = E.EId           
            WHERE TSLR.LRId = L.LRId 
            AND cast(EJ.dtA as datetime) + cast(E.HA as datetime)  
                  < cast(TS_EJ.dtD as datetime) + cast(TSE.HD as datetime)          
            ORDER BY EJ.dtA desc, E.HA desc  ) as [Précédent]            
         where [Précédent].IdLieuArrivee = @idLieu  ) as Précédent
     
    FROM TSE      
        LEFT OUTER JOIN TSEJ ON TSE.EId = TSEJ.EId       
        LEFT OUTER JOIN TSS ON TSEJ.Id = TSS.EJId       
        LEFT OUTER JOIN TSLR ON TSS.LRId = TSLR.LRId       
        LEFT OUTER JOIN TSJR ON TSLR.JRId = TSJR.JRId       
        LEFT OUTER JOIN TSR ON TSJR.RId = TSR.RId  
     
    WHERE  (TSE.Id1 in ('5555555', [...]) OR TSE.Id2 in ('892701', [...]))   
    AND (TSEJ.DtD = @Date)  
    AND (TSE.idLD = @idLieu or TSE.idLA = @idLieu) 
    ORDER BY Id1, TSS.R
    Les noms sont volontairement "masques", désolé si le tout est un peu illisible... Je n'ai fait figurer qu'une seule requête imbriquée SELECT qui permet d'obtenir un champ "Précédent", mais dans ma requête il y en a 4 construites exactement de la même manière (avec des critères dans le WHERE qui diffèrent). Je me demande s'il y a un moyen de reformuler pour optimiser mais je ne vois pas comment. Si quelqu'un a une idée je suis tout ouïe!!!

    Bonne soirée et merci d'avance de votre aide!!

    Rudy

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    1 utilisez la balise CODE (#) pour présenter le SQL
    2 respectez la charte de postage en postant le DDL de vos tables
    http://www.developpez.net/forums/d96...vement-poster/

    Sinon il est inutile d'espérer grand chose... SQL N'est pas magique !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    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 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Si vous ne voulez pas modifier le modèle des données (ce qui est partiellement compréhensible si l'application cliente est suffisamment avancée), vous pouvez toujours masquer ce changement.

    En effet, vous pouvez modifier le modèle, et exposer des vues qui reproduisent le modèle initial. Avec quelques éventuels triggers sur ces vues, cela pourrait vous permettre de tirer partie d'une meilleure modélisation, sans pour autant devoir tout réécrire l'application cliente.

    Attention cependant aux nouvelles règles de gestion : qui dit nouvelle modélisation dit généralement apparition de nouvelles contraintes, qui n'étaient pas forcément présentes dans le modèle initial. Il y aura certainement quelques adaptation à faire dans l'application cliente tout de même.
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. Optimisation de requete
    Par Scorff dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 11/07/2005, 09h59
  2. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26
  4. Optimisation de requete
    Par cyril dans le forum SQL
    Réponses: 3
    Dernier message: 09/10/2003, 08h57
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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