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 :

Comparaison de DATETIME : ignorer les ms


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut Comparaison de DATETIME : ignorer les ms
    Bonjour à tous,

    J'ai un sérieux problème avec une requête qui au premier jet, me remonte fréquemment un Timeout.
    Je pense que le problème vient dette clause WHERE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CONVERT (DATETIME, CONVERT (VARCHAR, c.dateversion, 120), 120)
    En fait ce que je fais, c'est une comparaison sur un DATETIME mais je supprime ou ignore les millisecondes.
    Donc comme je disais, la première fois c'est extrêmement long à charger, et ensuite je pense que le plan d'exécution est dans le cash ou quelque chose du genre, mais la réponse est instannée.

    Une idée ? Comment je peux faire mieux ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 443
    Par défaut
    Bonjour,
    A moins d'une erreur de copier/coller, je ne vois pas de comparaison dans le code que tu nous affiches, seulement une double conversion.

    Tatayo.

  3. #3
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut
    Oui, vous avez raison, j'ai pas tout copier / coller.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    WHERE CONVERT (DATETIME, CONVERT (VARCHAR, c.dateversion, 120), 120) > '01/07/2021 07:00:08'

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 443
    Par défaut
    Comme tu appliques une fonction sur la colonne de la table, aucun index n'est utilisable.
    Donc s'il n'y a aucun autre critère, SqlServer va parcourir toute la table pour retrouver ses petits.
    Lors du deuxième appel, tout est dans le cache, donc l'accès est bien plus rapide.

    Par contre je ne comprends pas cette double conversion.
    Quel est le type de la colonne DateVersion ?
    Si c'est un DateTime, pourquoi faire une conversion en Varchar, puis en DateTime ?

    Tatayo.

  5. #5
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut
    Excellente question ... J'ai trouvé cette parade sur le net, je l'avoue j'ai vu que ça machait, mais j'ai pas regardé davantage la solution proposée.
    Et comme d'habitude il faut allet vite ...
    Je comprends tout à fait le pb des index ! Il va falloir que je trouve une meilleure solution alors ...
    Il s'agit bien d'un DATETIME !!

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    une parade à quoi ? puisque c'est un datetime, on peut tester directement sans conversion, et du coup les index si présents sont éligibles

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/10/2012, 13h46
  2. [Flex3] Comparaison de dates ignorant les heures, minutes etc
    Par karami dans le forum Flex
    Réponses: 1
    Dernier message: 03/06/2011, 10h06
  3. comparaison de chaînes en ignorant les accents
    Par guigui5931 dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2007, 15h29
  4. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31
  5. [SQL][DateTime] Formater les dates en SQL
    Par Husqvarna dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/11/2004, 21h36

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