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 :

Analyser uniquement une partie d'une table


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Analyser uniquement une partie d'une table
    Bonjour tout le monde,

    Sur SQL Server, est-ce qu'il est possible d’exécuter une requête qui analyse uniquement les données ajoutées la veille dans une table.

    Actuellement ma requête analyse toute la table et cela prend beaucoup trop de temps

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Tu peux montrer un bout de ta requête ?
    Sinon je pense que, ceci peut te donner une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE ta_colonne_date = GETDATE() - 1
    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Tu peux montrer un bout de ta requête ?
    Sinon je pense que, ceci peut te donner une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE ta_colonne_date = GETDATE() - 1
    A+
    Salut, merci de ta réponse, mais en fait la méthode que tu décris est la méthode que j'utilise actuellement. Et elle ne me convient pas car elle m'oblige à analyser toute la table, et cela prend beaucoup de temps.

    Je me demande si, dans SQL Server il existe une méthode pour exécuter une requête juste sur une partie de la table (Ex :données enregistrée la veille) sans se baser sur une des colonnes de la table.

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Par défaut
    Moi je dirais plusieurs possibilités :

    Deuxième possibilité
    Si ton test sur ton champ date est trop long c'est que cette colonne n'est pas indexée donc en l'indexant tu pourras aller chercher les données de la veille sans que ça prenne un temps serveur abusé.

    Sinon ta table doit avoir un ID tu peux faire un between dans ta clause where.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jhulk Voir le message
    Moi je dirais plusieurs possibilités :

    Deuxième possibilité
    Si ton test sur ton champ date est trop long c'est que cette colonne n'est pas indexée donc en l'indexant tu pourras aller chercher les données de la veille sans que ça prenne un temps serveur abusé.

    Sinon ta table doit avoir un ID tu peux faire un between dans ta clause where.
    Merci ça me semble intéressant, je vais tester.

    Je viens de vérifier, et ma colonne 'logtime' est indexé mais pas la colonne 'source' qui est également utilisé pour faire le tri. Il faut sans doute l'indexer pour optimiser l’exécution de la requête?

    Voici le code que j'utilise actuellement, ainsi, vous pourrez peut être me dire quelle est la solution la plus judicieuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where [source] = 'external' and ((convert(varchar, GETDATE() - 1, 101)) = (convert(varchar, logtime, 101)))

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    même si ta colonne logtime est indexée, vu ta clause where tu n'utilise pas l'index, car ce n'est pas sargable. Et cela parce que tu utilises une fonction.
    Lis cet article à ce sujet :http://blog.developpez.com/zinzineti...s-fonctions-q/
    Le plus simple pour transformer ta clause where c'est de se dire que cela revient à prendre les données d'hier à partir de minuit jusqu'à aujourd'hui à minuit (aujourd'hui étant exclu).
    Cela donne donc quelque-chose comme cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    declare @date_debut datetime
    declare @date_fin datetime
    'La date d'aujourd'hui sans l'heure
    set @date_fin=CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
    'La date d'hier
    set @date_debut=DateAdd(day,-1,@date_fin)
    ...
    WHERE [source] = 'external' AND logtime>=@date_debut
    and logtime<@date_fin
    Essaie déjà ta requête comme cela, et après tu verras si tu as besoin d'indexer source.
    Par ailleurs quelles valeurs peut-prendre source et quel est sa dispersion (proportion de valeur 1 ou 2)? Est-ce que source est discriminant.
    A+
    soazig

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

Discussions similaires

  1. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 17h02
  2. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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