Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD > Débuter
Débuter Forum d'entraide : Comment débuter en base de données ? Tutoriels SGBD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/05/2008, 17h35   #1
Membre habitué
 
Inscription : septembre 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 357
Points : 118
Points : 118
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
whitespirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2008, 20h13   #2
Membre Expert
 
Inscription : août 2002
Messages : 1 249
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 249
Points : 1 512
Points : 1 512
Envoyer un message via Yahoo à ylarvor
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.
ylarvor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 07h08   #3
Membre habitué
 
Inscription : septembre 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 357
Points : 118
Points : 118
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 ?
whitespirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 09h59   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 12h46   #5
Membre habitué
 
Inscription : septembre 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 357
Points : 118
Points : 118
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.
whitespirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 14h20   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 455
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 455
Points : 7 580
Points : 7 580
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 21h58   #7
Membre Expert
 
Inscription : août 2002
Messages : 1 249
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 249
Points : 1 512
Points : 1 512
Envoyer un message via Yahoo à ylarvor
Citation:
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.
ylarvor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 09h09   #8
Membre habitué
 
Inscription : septembre 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 357
Points : 118
Points : 118
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.
whitespirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 18h13   #9
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 19h07   #10
Membre Expert
 
Inscription : août 2002
Messages : 1 249
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 249
Points : 1 512
Points : 1 512
Envoyer un message via Yahoo à ylarvor
ce que je voulais dire ce que l'on pouvait ajouter et retirer un index, sans toucher à la requete! c'est genial...
ylarvor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 07h53   #11
Membre habitué
 
Inscription : septembre 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 357
Points : 118
Points : 118
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.
whitespirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h07.


 
 
 
 
Partenaires

Hébergement Web