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

 SGBD Discussion :

Comment choisir les index d'une table


Sujet :

SGBD

  1. #1
    Membre habitué
    Inscrit en
    septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut Comment choisir les index d'une table
    Bonjour,

    Tout est dans le titre. J'utilise généralement un éditeur wysiwyg (windesign) pour créer mes bases de données Mysql. Jusqu'à présent je ne me suis jamais soucié et je crois que mes indexes sont placés sur les clés primaires. Mais comment choisir un index et à quoi ça va me servir ?

    Merci

  2. #2
    Membre expérimenté

    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
    Points : 1 745
    Points
    1 745
    Par défaut
    tu peux commencer par creer des index sur les clef etrangeres pour les jointures. un index peut diminuer le temps d'execution d'une requete.

  3. #3
    Membre habitué
    Inscrit en
    septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Par défaut j'en ai sur les clés (primaires et étrangères). Par contre, lorsque je fais des jointures je récupére toujours les mêmes champs (en général un champ [nom] d'une table liée. Est-ce qu'il est préférable de mettre un index aussi sur les champs des jointures ?

  4. #4
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    mars 2003
    Messages
    3 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : mars 2003
    Messages : 3 860
    Points : 5 960
    Points
    5 960
    Par défaut
    Oui !

    Il est pertinent d'indexer les champs qui participent aux clauses WHERE aussi.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre habitué
    Inscrit en
    septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Merci de répondre à ses questions basiques, et j'en pose encore une afin de mettre mes indexes.

    J'imagine qu'il ne faut pas abuser des indexes, mais comment voir si je n'en abuse pas. Sur une table à >10 champs, j'en met 4 ? Sur une table à <5 champs j'en met 3 ?

    Si j'en met trop, que va t'il se passer et comment m'en rendre compte ?

    Peut-être qu'il faudrait que je comprenne comment le SGBDR interprete les indexes. Est-ce que tous les sgbdr traitent les indexes de la même façon ? Est-ce que vous avez une doc à ce sujet ?

    Quel est le gain de réponse si j'utilise bien les indexes ?

    Merci de vos réponses.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    9 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 9 063
    Points : 30 660
    Points
    30 660
    Par défaut
    Un index va être couteux en volume et en temps de mise à jour / insertion.
    En contrepartie, il améliorera les temps de réponse sur les jointures, les tris, les sélections et les regroupements.
    Il faut peser les avantages et les inconvénients.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre expérimenté

    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
    Points : 1 745
    Points
    1 745
    Par défaut
    J'imagine qu'il ne faut pas abuser des indexes, mais comment voir si je n'en abuse pas. Sur une table à >10 champs, j'en met 4 ? Sur une table à <5 champs j'en met 3 ?

    Si j'en met trop, que va t'il se passer et comment m'en rendre compte ?
    un moteur comme SQL Serveur 2005 permet de savoir quels sont les index inutilisé et donc de le supprimer après quelques semaines.

    Il faut savoir que l'utilisation d'index entraine un accroissement de la taille de la base... je n'ai pas les chiffres exactes mais un tier à un demi sont les coefficient d'augmentation d'une base lorsqu'elle est bien indexée...

    inutile d'indexer un base de moins de 1 giga, de quelques milliers d'enregistrements mais si votre base fait plusieurs giga, et que vous comptez vos enregistrement en millions, l'indexation devient indispensable...

    L'indexation ne fait pas tout en terme d'optimisation et vous devez penser à normaliser correctement votre base et à choisir un serveur correctement architecturé...

    L'indexation, c'est ce que j'ai trouvé de plus passionnant dans l'approche DBA. C'est complètement independant des requetes et cela diminue drastiquement les temps de reponses de celle ci.

  8. #8
    Membre habitué
    Inscrit en
    septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Je vous remercie pour vos réponses, car j'ai enfin compris en un post, ce que je cherchais depuis longtemps.

    Je sais qu'il existe plein de tuto mais peut-être avez vous un précis concernant la création d'indexes pour MySQL.

    Je met le TAG résolu, car vous avez répondu (merci) à ce post.

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 473
    Points : 3 275
    Points
    3 275
    Par défaut
    Citation Envoyé par ylarvor Voir le message
    ... L'indexation, c'est ce que j'ai trouvé de plus passionnant dans l'approche DBA. C'est complètement independant des requetes et cela diminue drastiquement les temps de reponses de celle ci.
    Comment ça, c'est indépendant des requêtes ?

    Mais pas du tout ! C'est justement l'analyse des requêtes et des prédicats associés qui va permetre de choisir les bons index ...

    A la limite, et à part pour les clés primaires et les clés étrangères, si il n'y a pas de requêtes, il n'y a pas besoin d'index ...

  10. #10
    Membre expérimenté

    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
    Points : 1 745
    Points
    1 745
    Par défaut
    ce que je voulais dire ce que l'on pouvait ajouter et retirer un index, sans toucher à la requete! c'est genial...

  11. #11
    Membre habitué
    Inscrit en
    septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Pour le moment, j'ai mis des indexs sur tous mes champs utilisés pour une requête. Je ne verrai pas de changement sur les temps d'éxécution maintenant car il s'agit d'une nouvelle application et la base de données est quasi vide. Chacune de mes classes implémentant une table (l'ORM) a une requête retournant les informations nécessaires pour remplir les liste <select>. J'ai mis mes indexes sur ces champs.

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

Discussions similaires

  1. Req pour lister les index d'une table ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/05/2009, 11h08
  2. [ODBC/Interbase] Comment récupérer les données d'une table ?
    Par etiennegaloup dans le forum Accès aux données
    Réponses: 3
    Dernier message: 27/09/2006, 08h55
  3. Comment supprimer les doublons d'une table?!
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/01/2006, 08h48
  4. [Débutant][indexes]Trouver les indexes d'une table
    Par Gromitou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/12/2005, 17h50
  5. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51

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