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 :

[OPTIMISATION] Date en tant que variable dans les clauses WHERE


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut [OPTIMISATION] Date en tant que variable dans les clauses WHERE
    Bonjour,

    Depuis quelques jours j'essaye d'optimiser des procédures stockées d'une base SQL SERVER 2000, et je m'aperçois que certaines utilisent des variables date comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @DateDuJour AS DATETIME
    SET @DateDuJour = cast(convert(varchar, GETDATE(),3) as datetime)
    Puis cette variable est réutilisée dans le reste de la procédure comme par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM...
    WHERE DateReception > @DateDuJour
    Or en ayant fait des essais sur une base de test, ou je remplaçais @DateDuJour par une date rentrée manuellement ex : '09/09/09 00:00:00', les requêtes étaient moins gourmandes en ressources. J'ai donc essayé de remplacé la variable par son expression directement dans mes requêtes comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM...
    WHERE DateReception > cast(convert(varchar, GETDATE(),3) as datetime)
    Et effectivement après avoir relancé les procédures concernées, celles-ci ont demandé moins de ressources au serveur (Duration et Read inférieurs sur le profiler).

    Ce gain est appréciable mais je n'arrive pas à comprendre ce phénomène, quelqu'un aurait-il une explication ?

    Merci d'avance pour vos réponses.

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Quel est le type de données de la colonne DateReception ? Datetime ou CHAR ???

    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
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Bonjour,

    il s'agit bien de champs DATETIME dans les tables concernées.

    Cdlt.

  4. #4
    Expert confirmé
    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 : 46
    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
    Par défaut
    Bonjour,

    Quelle version de SQL Server utilisez vous ?

    ++

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    je travaille sur des bases SQL SERVER 2000 SP3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select @@VERSION
    --Microsoft SQL Server  2000 - 8.00.760 (Intel X86)   Dec 17 2002 14:22:05   Copyright (c) 1988-2003 Microsoft Corporation  Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4) 

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Sachant donc que DateReception est de type DATETIME, il n'y a aucun intérêt, si ce n'est un certains masochisme de caster une date en char puis de la recaster en date !!!! Ce qui est fait ici :

    DateReception > cast(convert(varchar, GETDATE(),3) AS datetime)

    Il serait plus intelligent d'écire :

    DateReception > GETDATE()
    Tout simplement.

    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/ * * * * *

Discussions similaires

  1. Problème de variable dans la clause WHERE avec CONVERT + DATE
    Par Archi89 dans le forum Développement
    Réponses: 4
    Dernier message: 09/01/2015, 20h35
  2. variables dans la clause where
    Par ledisciple dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/08/2009, 15h17
  3. [AC-2000] Déclarer une procédure en tant que variable dans une procédure globale
    Par kir4000 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/08/2009, 16h52
  4. Réponses: 7
    Dernier message: 28/04/2009, 23h26
  5. Réponses: 2
    Dernier message: 16/04/2008, 20h06

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