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 :

Vue ou table temporaire


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut Vue ou table temporaire
    Bonjour tous le monde
    Au démarrage de mon logiciel j'ai une dizaine de requêtes qui s’exécutent c'est pourquoi le temps de réponse est devenue très important c'est pour cela on a pensé au vues ou au tableau temporaire
    Tous d'abord je n'ai aucune idée des deux ,je me suis documenté sur les vues mais les tables temporaires je n'ai aucune une idée ,un camarade qui me les a proposé comme solution à mon problème .
    Je veux une solution qui est rapide en terme de temps d'exécution ,
    donc si quelqu'un pourra m’aider merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pour commencer, à quoi ressemblent ces requêtes lentes ?
    Ont-elles été optimisées ?
    Qu'est-ce qui coincent pour qu'elles soient si lentes ?
    A-t-on regarder du côté des indexes ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre réponse

    Voilà un exemple de mes requétes j'en ai 9 autres qui lui ressemblent
    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
    SELECT     Taffaire.Code_Affaire, TSites.Code_Site, Taffaire.code_agence, GChangementEtatProjet.EtatPro, TSites.ddeb_chantier, TSites.dfin_chantier, Taffaire.chargedaffaire, Taffaire.IntituleAffaire, 
                          Taffaire.TypeConvention
    FROM         Taffaire LEFT OUTER JOIN
                          TSites ON Taffaire.Code_Affaire = TSites.Code_Affaire LEFT OUTER JOIN
                              (SELECT     Code_Affaire, Code_site, MAX(EtatProjet) AS EtatPro
                                 FROM         GChangementEtatProjet AS GChangementEtatProjet_1
                                 WHERE     (DateFinEtat IS NULL)
                                 GROUP BY Code_Affaire, Code_site) AS GChangementEtatProjet ON TSites.Code_Affaire = GChangementEtatProjet.Code_Affaire AND 
                          TSites.Code_Site = GChangementEtatProjet.Code_site
    WHERE     (TSites.ddeb_chantier >=
                              (SELECT     DateDebChantierRef
                                 FROM         entreprise)) AND (Taffaire.AnneeCvt >=
                              (SELECT     AnneeCVTRef
                                 FROM         entreprise AS entreprise_1)) AND (GChangementEtatProjet.EtatPro = 'ENC') AND (Taffaire.Code_Affaire IN
                              (SELECT     Code_Affaire
                                 FROM         GChangementEtatConvention
                                 WHERE     (EtatConvention <> 'ANL') AND (EtatConvention <> 'RSL') AND (DateFinEtat IS NULL))) AND ((Taffaire.Code_Affaire + TSites.Code_Site) NOT IN
                              (SELECT     Code_Affaire + Code_Site AS Expr1
                                 FROM         TuserSite
                                 WHERE     (ControleTrvExe = '1'))) AND (Taffaire.TypeConvention = 'CPLQ' OR
                          Taffaire.TypeConvention = 'CPLT' OR
                          Taffaire.TypeConvention = 'CTEX')
    après identification l’utilisateur doit attendre présque 5 à 8 min pour commencer à exploiter le logiciel et cela les gène surtout quand il s'agit d'une table importante de Taffaire qui pourra avoir jusqu'à 8000 affaires(lignes)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par HDR_16 Voir le message
    après identification l’utilisateur doit attendre présque 5 à 8 min pour commencer à exploiter le logiciel et cela les gène surtout quand il s'agit d'une table importante de Taffaire qui pourra avoir jusqu'à 8000 affaires(lignes)
    8000 lignes, c'est gros pour vous ?
    Est-ce que vous avez des clefs primaires et des indexes dans votre bd ?
    Pour ce qui est de votre requête, vous avez visiblement un prix de gros sur les parenthèses. Mais surtout on peut écrire ça plus proprement en simplifiant les requêtes imbriquées. En plus, ça serait plus compréhensible.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par HDR_16 Voir le message
    Merci pour votre réponse

    Voilà un exemple de mes requétes j'en ai 9 autres qui lui ressemblent
    Ouchh !
    Si les 9 autres lui ressemblent, vous allez avoir du travail.

    Vous avez beaucoup de sous requêtes, dont certaines ne sont pas corrélées (n'avez vous qu'une seule ligne dans la table entreprise ?)
    Vous avez aussi des filtres mal exprimés, et le moteur ne peut pas utiliser d'index.


    Citation Envoyé par HDR_16 Voir le message
    après identification l’utilisateur doit attendre présque 5 à 8 min pour commencer à exploiter le logiciel et cela les gène
    en effet !!!
    Soit vous réécrivez les requêtes, soit vous installez des machines à café à coté de chaque poste utilisateur.

    il est en effet possible que des vues bien conçues, si elles sont indexées, permettent d'obtenir de meilleurs performances, mais en l'état, commencez par revoir vos requêtes, puis les éventuels index manquants.


    Que donne cette requête par rapport à celle que vous avez postée (il y a surement encore a faire, et je ne suis pas certain qu'elle soit juste d'emblée, mais c'est un début, et sans connaitre la structure de vos tables, vos index, vos données, c'est pas évident):
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    SELECT     
    	Taffaire.Code_Affaire, 
    	TSites.Code_Site, 
    	Taffaire.code_agence, 
    	MAX(GChangementEtatProjet.EtatPro), 
    	TSites.ddeb_chantier, 
    	TSites.dfin_chantier, 
    	Taffaire.chargedaffaire, 
    	Taffaire.IntituleAffaire, 
    	Taffaire.TypeConvention
    FROM			Taffaire 
    LEFT OUTER JOIN	TSites 
    	ON				Taffaire.Code_Affaire = TSites.Code_Affaire 
    LEFT OUTER JOIN	GChangementEtatProjet
    	ON	TSites.Code_Affaire = GChangementEtatProjet.Code_Affaire 
    	AND TSites.Code_Site = GChangementEtatProjet.Code_site
    	AND	DateFinEtat IS NULL
    LEFT JOIN entreprise 
    	ON		TSites.ddeb_chantier >= entreprise.DateDebChantierRef 
    WHERE
    		entreprise.DateDebChantierRef IS NOT NULL
    	AND	Taffaire.AnneeCvt >= entreprise.AnneeCVTRef
        AND	GChangementEtatProjet.EtatPro = 'ENC') 
    	AND	EXISTS(
    			SELECT	1
    			FROM	GChangementEtatConvention
    			WHERE	EtatConvention <> 'ANL'
    			AND		EtatConvention <> 'RSL'
    			AND		DateFinEtat IS NULL
    			AND		GChangementEtatConvention.Code_Affaire = Taffaire.Code_Affaire
    	)
    	AND NOT EXISTS(
    		SELECT	1
    		FROM	TuserSite
    		WHERE	ControleTrvExe = '1'
    		AND		TuserSite.Code_Affaire = Taffaire.Code_Affaire
    		AND		TuserSite.Code_Site = Taffaire.Code_Site
    	)
    	AND Taffaire.TypeConvention IN ('CPLQ', 'CPLT' ,'CTEX')
    GROUP BY 
    	Taffaire.Code_Affaire, 
    	TSites.Code_Site, 
    	Taffaire.code_agence, 
    	TSites.ddeb_chantier, 
    	TSites.dfin_chantier, 
    	Taffaire.chargedaffaire, 
    	Taffaire.IntituleAffaire, 
    	Taffaire.TypeConvention

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    effectivement je n'est qu'une seul ligne dans la table entreprise..
    on utilise pas d'index bon à part s'ils sont générés automatiquement
    pour les clés primaires oui on en a une centaine

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    il est en effet possible que des vues bien conçues, si elles sont indexées, permettent d'obtenir de meilleurs performances, mais en l'état, commencez par revoir vos requêtes, puis les éventuels index manquants
    revoir les requêtes j’en doute j'ai plein de tâches à faire à part celle ci donc je préfére passer au vues s'ils ça m'assure un bon résultat
    puis-je avoir une idée SVP

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par HDR_16 Voir le message
    donc je préférè passer au vues s'ils ça m'assure un bon résultat
    puis-je avoir une idée SVP
    Si les vues étaient des solutions miracles pour rendre des requête douteuses performantes, ça se saurait...

    Citation Envoyé par HDR_16 Voir le message
    revoir les requêtes j’en doute j'ai plein de tâches à faire à part celle ci
    Revoir les requêtes et les index, c'est pourtant la première (et seule ?) chose à faire actuellement.
    Si vous n'avez vraiment pas le temps, la loi de Pareto peut vous être utile :il est statistiquement probable que deux de vos dix requêtes prennent 80% de vos 8 minutes. Commencez par voir quelles sont les requêtes les plus lentes, et corrigez celles-ci en premier.
    Si même pour ça vous n'avez pas le temps, modifiez votre logiciel pour qu'il n’exécute pas ces requêtes au démarrage, ou alors en arrière plan ! a première vue, vous n'avez pas de filtres particulier sur les données, et il semble qu'il s'agisse de requête pour un tableau de bord général qui n'est peut être même pas consulté... Déplacez ces requête sur une partie spécifique du logiciel pour qu'elles ne soient exécutées qu'à la demande... avant la pause café par exemple...

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    ou alors en arrière plan ! a première vue
    J'ai pensé à cette solution mais mon responsable n'a pas vraiment aimé car il dit que ca prendra comme méme du temps
    pour les requétes je vais les revoir une par une et voir celle qui prend plus de temps

    Si les vues étaient des solutions miracles pour rendre des requête douteuses performantes, ça se saurait...

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    effectivement c'est le cas
    j'avais deux requêtes qui prenaient plus de temps que les autres je vais les reprogrammer et revoir ça donne quoi

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

Discussions similaires

  1. Utilisation des tables temporaires avec une vue
    Par patic dans le forum Requêtes
    Réponses: 0
    Dernier message: 18/09/2009, 18h56
  2. [MySQL] vues et tables temporaires->votre opinion svp
    Par schwarzy2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/06/2008, 08h10
  3. les vues et les tables temporaires
    Par acipeg dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 28/11/2006, 14h15
  4. Difference entre vue et Table temporaire
    Par youcef81 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/08/2006, 12h18
  5. Vue ou table temporaire ?
    Par beastman007 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/10/2005, 15h07

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