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 :

procedure stocke non optimise.


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Par défaut [RESOLU]procedure stocke non optimise.
    Bonjour,

    J'ai une procedure stocke qui me permet d'afficher la liste de tout les employee avec leur total d'heure, de repas et de depenses pour des date donnee. J'affiche aussi quand l'employee n'a pas d'heure, de repas oude depenses.

    Voici un exemple de resultat:

    semaine:21/1/2005 -27/1/2005
    Noms heure repas depenses
    roger 35 3 1000
    laurent 0 0 0
    pierre 25 1 400

    Cette procedure prend beaucoup de temps quand il y a beaucoup d'employee. J'ai essaye de l'optimise mais sans succes.
    Je voudrais essayer de supprimer les 3 sous-expression avec les select.


    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
    select @StartDate As DateLigne, TPerson.Name, TPerson.idperson,
    	(select sum(coalesce(hours,0) - coalesce(lunch,0)) FROM Thereport
    	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 ) As hours,
     
    	(select sum(coalesce(nonbillable,0)) FROM Thereport
    	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 ) As nonbillable,
     
    	(select sum((coalesce(miles,0)*3)+ coalesce(perdiem,0)+coalesce(supplies,0)+coalesce(airfare,0)+ coalesce( gas,0) + coalesce(autorental,0)+ coalesce(other,0) ) FROM Thereport
     
    	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 )  As Expenses
    FROM TUserProject, TPerson 
     
    WHERE TUserProject.etridperson=TPerson.idperson AND etridproject = @project AND [type]=1and active=isnull(@active,active)
     
    order by Name

    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Bonjour,

    A première vue je dirais que tu peux supprimer les trois select en placant directement les somme dans le select principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select @StartDate As DateLigne, TPerson.Name, TPerson.idperson,  sum(coalesce(hours,0) - coalesce(lunch,0)) As hours, 
    sum(coalesce(nonbillable,0)) As nonbillable, 
    select sum((coalesce(miles,0)*3)+ coalesce(perdiem,0)+coalesce(supplies,0)+coalesce(airfare,0)+ coalesce( gas,0) + coalesce(autorental,0)+ coalesce(other,0) )  As Expenses 
     
    FROM TUserProject, TPerson ,Thereport 
     
    WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0
    AND TUserProject.etridperson=TPerson.idperson AND etridproject = @project AND [type]=1and active=isnull(@active,active) 
     
    GROUP BY  TPerson.Name, TPerson.idperson
     
    order by Name
    Le code est fait rapidement tu as certainement des erreurs, mais l'idée peut être là.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Par défaut a
    Merci,


    Le probleme avec cette solution c'est que cela m'affiche seulement les personnes qui ont des heures, ou repas ou depenses.
    Je veux voir tout le monde, meme si ils n'ont pas d'heure.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Le probleme avec cette solution c'est que cela m'affiche seulement les personnes qui ont des heures, ou repas ou depenses.
    Je veux voir tout le monde, meme si ils n'ont pas d'heure.
    Dans ce cas utilise une jointure externe.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select @StartDate As DateLigne, TPerson.Name, TPerson.idperson,  sum(coalesce(hours,0) - coalesce(lunch,0)) As hours, 
    sum(coalesce(nonbillable,0)) As nonbillable, 
    select sum((coalesce(miles,0)*3)+ coalesce(perdiem,0)+coalesce(supplies,0)+coalesce(airfare,0)+ coalesce( gas,0) + coalesce(autorental,0)+ coalesce(other,0) )  As Expenses 
     
    FROM TUserProject, TPerson  LEFT OUTER JOIN Thereport t
    ON t.etridperson=TPerson.idperson AND 
    t.etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 
     
    WHERE TUserProject.etridperson=TPerson.idperson AND etridproject = @project AND [type]=1and active=isnull(@active,active) 
     
    GROUP BY  TPerson.Name, TPerson.idperson 
     
    order by Name

  5. #5
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Par défaut d
    Merci beaucoup, cela marche parfaitement.

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

Discussions similaires

  1. [Optimisation] Procedure stocké, index
    Par SiOuZ dans le forum Développement
    Réponses: 1
    Dernier message: 10/03/2011, 10h31
  2. optimisation procedure stocké
    Par karimoos dans le forum PL/SQL
    Réponses: 4
    Dernier message: 14/05/2010, 13h58
  3. optimisation procedure stocké
    Par karimoos dans le forum PL/SQL
    Réponses: 11
    Dernier message: 11/05/2010, 19h03
  4. [Procedure Stockée] Optimisation
    Par lapanne dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 28/06/2007, 09h38
  5. procedure stocke non optimise.
    Par arnololo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/08/2005, 19h00

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