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

Administration SQL Server Discussion :

Temps d'execution d'une requete


Sujet :

Administration SQL Server

  1. #21
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    A la rigueur je mettrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    AND fde.do_date >= '20090101'
    ...
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    AND fde.do_date >= convert(datetime, '20090101', 112)
    ...
    mais cela n'apportera pas grand chose à la performance.

    Je serais bien intéressé de voir le comportement de ces 2 requêtes sur les 2 serveurs.

    ++

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    après quelque test voici les résultats

    déjà votre dernière requete me donnais ces erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Msg*209, Niveau*16, État*1, Ligne*1
    Nom de colonne 'do_piece' ambigu.
    Msg*209, Niveau*16, État*1, Ligne*2
    Nom de colonne 'do_date' ambigu.
    Msg*209, Niveau*16, État*1, Ligne*23
    Nom de colonne 'margepcent' ambigu.
    Msg*209, Niveau*16, État*1, Ligne*24
    Nom de colonne 'marge' ambigu.
    J'ai corrigé comme ceci

    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
    SELECT fdl.do_piece
         , fdl.do_date
         , ct_num
         , dl_ligne
         , ar_ref
         , ar_refcompose
         , dl_design
         , dl_qte
         , dl_montantht / dl_qte AS pu
         , co_nom
         , case
             when (ar_ref = ar_refcompose AND ar_refcompose <> '')
               OR ar_refcompose IS NULL
               OR ar_refcompose = ''
             then dl_montantht
             else 0
           end
         , case when ar_ref  = ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , case when ar_ref <> ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , pa
         , cr
         , comintermediaire
         , fdl.margepcent
         , fdl.marge
         , ajustpa
         , pa_rectifie 
      FROM f_docligne AS fdl
           LEFT OUTER JOIN f_collaborateur RepDoc
             ON fdl.CO_No = Repdoc.co_no
           INNER JOIN f_docentete AS fde
             ON fde.do_piece = fdl.do_piece
           INNER JOIN bor_view_docligne_ctrl AS bvd
             ON bvd.do_piece   = fde.do_piece 
            AND bvd.do_type    = fde.do_type
            AND bvd.do_domaine = fde.do_domaine
     WHERE dl_qte <> 0
       AND bvd.total_ht_from_composant - bvd.total_ht NOT BETWEEN -0.5 AND 0.5
       AND fde.do_date >= convert(datetime, '20090101', 112)
       AND fde.do_type < 7
    et on est a 3 secondes sur le nouveau serveur et 2 secondes sur l'ancien

    si c'est pas de l'optimisation de requète ca

    Les résultats sont identiques (enfin j'ai pas tou verifié)

    Bravo a vous

    Après pourquoi l'ancienne requète etait plus longue sur le nouveau serveur que sur l'ancien cela resetara un mystère que je laisserai bien volonté a l'année 2011 !!!!

    Sur ce passé de bonnes fêtes

    Merci

    Thierry

  3. #23
    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
    Pour bien finir la requête, maintenant que toutes vos tables ont des alias, il faut les utiliser pour toutes les colonnes de la requête.
    Dès la relecture on est ainsi capable de voir d'où vient l'information.
    Ce n'est pas très long à faire pendant qu'on développe et croyez-moi ça permet de gagner beaucoup de temps par la suite quand on revient dessus, ou quand quelqu'un d'autre revient dessus.

    Pour comparer les résultats de deux requêtes, ce n'est pas compliqué.
    Utilisez des vues, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create view dbo.v_requete_old
    as <ancienne_requete>
     
    create view dbo.v_requete_new
    as <nouvelle_requete>
     
    select * from dbo.v_requete_old
    except 
    select * from dbo.v_requete_new
     
    select * from dbo.v_requete_new
    except 
    select * from dbo.v_requete_old
    Si les deux différences ne renvoient aucune ligne, c'est que les résultats des requêtes sont identiques.

    Pendant que j'y pense, il y a un cas de figure qui est couvert par la nouvelle requête mais pas par l'ancienne, à vous de me dire si c'est possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ar_refcompose <> '' and ar_ref is null
    Si ce cas peut arriver il faudra rajouter le filtrer dans le where.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Temps d'execution d'une requete via phpMyAdmin ou PHP
    Par gcvoiron dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/10/2009, 23h08
  2. Temps d'execution d'une requete
    Par toto2233 dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/07/2007, 08h55
  3. Réf : Mesurer le temps d 'execution d 'une requete
    Par akrabmehdi dans le forum SQL
    Réponses: 1
    Dernier message: 10/07/2007, 20h48
  4. temp d'execution d'une requete sql
    Par mitoubra dans le forum JDBC
    Réponses: 4
    Dernier message: 15/06/2007, 22h34
  5. [Stratégie] Mesurer le temps d'exécution d'une requête
    Par nice dans le forum Général Java
    Réponses: 5
    Dernier message: 29/01/2006, 17h53

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