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 :

requête à optimiser


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut requête à optimiser
    bonjour j'ai quelques requêtes à optimiser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Rupture = case when bat.id_dep = bat.id_arr then 0 else 1 end
    il faut éviter le case-when dans l'optimisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rupture = bat.id_arr (bat.id_dep,0)
    est-ce ma syntaxe est correcte ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND s.Dh_Arr <= @DateDebut
    AND s.dh_dep > @DateFin
    dans l'optimisation, on évite les <> et on utilise plutôt between. du coup, j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND s.Dh_Arr between '0001-01-01 00:00:00.000' and @DateDebut
    AND s.dh_dep between @DateFin and '9999-12-30 00:00:00.000'
    je ne suis pas sure de ma syntaxe sachant que j'ai un '>' pour ma date. comment dois-je m'y prendre ? faut-il que j'utilise dateadd(time,1) sachant que mon datedebut et datefin sont des datetime ?



    et enfin, je voudrais éviter mon 'left join' qui n'est pas recommandé en optimisation. j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT...
    FROM ...
    LEFT JOIN bat as bt with (nolock) on s.id_sg = bt.id_se1
    WHERE sg.id_rv = @Id_srv
    AND sg.id_im = @Id_sim1
    AND sg.id_ct = 0
    AND sg.dh_ep > @DateFin
    normalement, il faut utiliser une sous-requête mais je ne sais pas comment m'y prendre.

    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Bonjour,

    Citation Envoyé par tung-savate
    il faut éviter le case-when dans l'optimisation.
    En fait il faut surtout éviter les calculs sur les colonnes indexées, ça empêche l'optimisateur d'utiliser les indexes.

    Citation Envoyé par tung-savate
    ...on évite les <> et on utilise plutôt between.
    oui pour remplacer <> mais on utilise > et < à la place. (A propos pour les dates SQL préconisait plutôt l'emploi de OVERLAPS que BETWEEN, mais je ne sais même pas s'il est implémenté.)

    Citation Envoyé par tung-savate
    ...il faut utiliser une sous-requête
    Je ne suis pas sur qu'1 s-rq soit meilleure qu'1 jointure !

    A +

Discussions similaires

  1. Requête à optimiser
    Par koukoula dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/06/2008, 10h52
  2. Sous-Sous-Requête: Optimisation possible ?
    Par FMaz dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/04/2008, 03h49
  3. [SQL2K5] Plan de requête optimisable ?
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/08/2007, 11h33
  4. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  5. Réponses: 10
    Dernier message: 20/10/2006, 16h36

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