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

Administration SQL Server Discussion :

Index - Problème de temps


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut Index - Problème de temps
    Bonjour à tous,

    Je suis entrain d'essayer d'accélérer les temps de traitement de ma base de données : SQL SERVER EXPRESS.

    J'ai une table CDE : 2 500 000 enregistrements.

    J'ai identifié 3 colonnes pour accélérer nombreuses de mes requêtes sur cette table.

    Quand je créé mon index sur ces 3 colonnes (De la colonne qui a le plus de dispersion vers celle qui en a le moins).

    Ma requête prend plus de temps, quelques centièmes de secondes, mais en tout cas l'index ne me fait pas gagner de temps.

    J'ai testé de plusieurs façon :
    - Lancement de la requête sans l'index, création de l'index, redémarrage serveur et balancement de la requête.
    -Lancement de la requete sans l'index, création de l'index, et relancement de l requete.

    Dans aucun des cas je gagne du temps de traitement.

    J'ai essayé de créer un index seulement sur la colonne qui a le plus de dispersion, les temps de traitement sont identiques.

    Si quelqu'un aurait un piste je suis preneur.

    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  2. #2
    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
    Ben, si tu veux optimiser une requête en particulier, il serait bon que tu nous la montre pour nous faire un avis. Avec les colonnes de ta table aussi.

  3. #3
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut
    oui c'est vrai désolé,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT  dateCde, montant, client
    FROM cde
    WHERE codecompte='00100'
    AND datecde BEtWEEN '20060101' AND '20080918'
    AND devise='EUR'
    Requête basique.

    J'ai créé un premier index : datecde,codecompte,devise.
    Ensuite j'ai essayé juste en indéxant la colonne codecompte.

    La requete renvoi un peu plus de 350 000 résultats.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  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 indexation et amélioration des temps de réponses.
    Bonjour,

    Ton premier index aurait dù intégrer aussi ( montant, client ) il me semble pour éviter une lecture linéaire à la suite.

    Je vois qu'il n'y a aucune jointure dans ta table donc un index n'apportera certainement rien de plus que l'organisation de ton index cluster, réorganise ta table dans le sens qui convient pour obtenir un bon temps de réponse.

  5. #5
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut
    Merci pour cette réponse

    cette requête était une requête d'exemple pour tester l'apport de mon index sur mes temps de traitement.

    Je pourrais ajouter montant, et client dans mon index pour éviter de refaire une lecture dans la base, mais je vais expliquer mon problème différement.

    J'ai plusieurs état dans mon programme, qui ont des colonnes dans le SELECT différentes, et ce nombre peut dépasser les 15. Mais les clauses WHERE sont quasiment toujours les mêmes, c'est donc pour cela que j'avais créé cet index, pour accélérer mes recherches. Je ne peux pas inclure toutes les colonnes de mon SELECT dans l'index.

    N'était-ce pas la bonne solution de créer un index sur les clauses du WHERE ?

    Autre problème suite à ta réponse, un index n'accélère pas le traitement si la requête est juste sur une table ?
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  6. #6
    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
    N'était-ce pas la bonne solution de créer un index sur les clauses du WHERE ?
    Si! Je ferais cela aussi.

    Autre problème suite à ta réponse, un index n'accélère pas le traitement si la requête est juste sur une table ?
    Il me semble, je me trompe peut être, qu'un index cluster a la même structure qu'un index, la seul différence, c'est qu'il est LA table. Si tu as un cluster sur ta table et qu'il est organisé au mieux pour répondre au plus vite à ta requête... Rajouter un deuxième index non cluster couvrant par dessus me semble sans aucun intérêt sauf si il y a un écart entre les colonnes du cluster et de la requete mais je dis cela à l'intuition. Cela demanderait une confirmation d'un modérateur.

    Concernant le rendement de ton index, je te conseille de regarder le plan d'exécution en t'appuyant sur la documentation de rudi bruchez sur l'optimisation. Tu verras bien si il est utilisé ou non.

  7. #7
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut
    Je viens de créer un index clustered, ma requête est accélérée.

    Mais le problème c'este que je vais être obligée de créer d'autres index.

    Si je comprend bien , si un index n'est pas couvrant il ne fait pas forcément gagner du temps ?

    Je me pose une question. Imaginons que j'ai deux requêtes avec la même clause WHERE mais pas les mêmes colonnes de SELECT. Je dois donc créer deux index couvrants les colonnes du SELECT.

    Exemple :
    Requete 1 --> code, libelle, montant FROM Table1 WHERE date='1000' AND devise='EUR'
    Requete 2 --> numseq, heureDepot FROM table1 WHERE date='1000' AND devise='EUR'

    Je devrais donc créer les deux index suivant :

    index1 : date, devise, code, libelle, montant
    index2 : date, devise, code, numseq, heuredepot

    Car si je créé un seul index non couvrant je me retrouve dans la même configuration de départ avec une perte de temps possible.

    Si quelqu'un peux me cconfirmer cela ou me corriger


    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  8. #8
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    ton premier problème, est le nombre de lignes affectées. Si tu retournes 350 000 lignes (sur quel volume de table ?), il y a de fortes chances qu'un index nonclustered ne soit pas utilisé (sauf s'il couvre la requête), parce qu'il est plus coûteux de faire des recherches d'index que de parcourir toute la table.

    Un index utile est dit sélectif : il permet de sélectionner des lignes les plus uniques possibles.

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

Discussions similaires

  1. problèmes d'index et de temps de requetes
    Par xavier_dcf dans le forum Débuter
    Réponses: 2
    Dernier message: 05/11/2012, 13h15
  2. [SQL] Problème de temps d'exécution maximum
    Par manshoon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/05/2006, 14h07
  3. Problème conversion temps
    Par Vodkha dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2006, 15h24
  4. Delete cascade --> problème de temps de traitement
    Par celine31 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/01/2006, 12h03
  5. Réponses: 5
    Dernier message: 09/05/2005, 12h24

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