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 :

[SQL SERVER 2005 STD] accélérer une requête


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [SQL SERVER 2005 STD] accélérer une requête
    Bonjour à tous,

    Ma question est simple :

    Que puis-je faire pour réduire le temps de réponse d'une requête ?

    Je pense que le fait que ma requête prenne un temps considérable pour retourner un résultat vient du fait que j'interroge une table de plusieurs millions (voir dizaines de millions, je n'ai jamais pris le d'attendre que managment studio ait fini de récupérer les infos pour savoir combien il y a de lignes) de records et que la requête doit regarder toutes les lignes pour voir si elles correspondent aux critères.

    Cependant, je suis certain qu'il doit y avoir des techniques afin d'optimiser cette recherche et d'ainsi, diminuer (considérablement?) le temps de réponse.

    J'ai déjà pensé à diviser ma table en tables plus petites en fonction des années mais cela ne ferait que contourner le problème.

    Merci d'avance.

    Griftou.

  2. #2
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Euh..... Comment veux-tu que l'on puisse t'aider si l'on a aucune idée ni de tes tables, ni de la requête ni de l'architecture etc....

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'ai présumé qu'il y avait tout un tas de choses à faire une fois que l'on vient de créer une DB et que je ne les ai pas faites. Peu importe (ou presque) ce qu'il y a dedans.

    Créer des index ou des trucs du genre (j'suis pas du tout un dba donc j'y connais pas vraiment qqch).

    C'est pour ça que je n'avais pas donné plus de détails...

    Mais puisqu'apperemment, c'est nécessaire, les voilà :

    Tickets.Ticket

    date : char(8)
    siege : char(3)
    ray : char(4)
    type : char(1)
    eanart : char(13)
    pu : money
    qt : int
    ca : money
    rab : money
    escp : money
    lm : char(1)
    nocre : char(4)
    caisse : char(3)
    ticket : char(4)
    cartebanque : char(16)
    carteclient : char(16)
    gib : char(3)
    time : char(4)
    typecart : char(1)
    typefim : char(1)
    typerab : char(1)
    typeray : char(1)

    Bons.tb2008

    id : int
    siege : char(3)
    ddate : char(6)
    heure : char(4)
    caisse : char(3)
    ticket : char(4)
    type_transaction : char(4)
    type_bon : char(1)
    barcode : char(13)
    nombre : smallint

    La requête consiste à récupérer les numéros des cartes clients se trouvant dans la première table mais uniquement, dans l'exemple que je teste, pour les bons dont la date est comprise dans le mois de janvier et dont le barcode commence par "027".

    Voilà, j'espère ne rien avoir oublié.

    Griftou.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    La requête consiste à récupérer les numéros des cartes clients se trouvant dans la première table mais uniquement, dans l'exemple que je teste, pour les bons dont la date est comprise dans le mois de janvier et dont le barcode commence par "027".
    Tu peux essayer de creer un index sur la date et sur le barcode avec la commande create index. Pour information, avec une table de plusieurs millions d'enregistrement, l'index risque de consommer une certaine place.

    cree ces 2 index. teste la requete. supprime les index si tu n'es pas satisfait avec DROP INDEX...

  5. #5
    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
    De quelle "date" s'agit-il ? Quelle colonne exactement ? Sans cela difficile de vous répondre !

    Commencez par respecter les règles du forum. Cela nous évitera et vous évitera aussi de perdre du temps :
    http://www.developpez.net/forums/showthread.php?t=96701
    En particulier postez le DDL de vos tables et une ébauche de la requête SQL.

    Sinon tout ce que nous pourrons vous dire risque de ne serveir à rien !

    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. [SQL Server 2005] print dans une procédure stockée
    Par anayathefirst dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/03/2008, 15h50
  2. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  3. [SQL SERVER 2005] comment créer une base de données ?
    Par Syrrus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/03/2007, 14h26
  4. [C#/SQL Server 2005] Comment créer une base de donnée par le code ?
    Par FraktaL dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/09/2006, 17h27
  5. [SQL Server 2005 Std] Pb de Réplication (IDENTITY)
    Par Peck777 dans le forum Réplications
    Réponses: 2
    Dernier message: 29/06/2006, 10h32

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