-
Utiliser des Index
Bonjour,
J'ai un soucis avec des index.
Il y a quelque temps, j'ai posé une question concernant les capacité de mysql et on m'a conseillé d'utiliser des index.
En 2 mots, je suis en train de dev un site pour la boite ou je bosse. La l'entreprise est implantée sur toute la France en une centaine d'agences et chaque agence s'occupe de xx communes.
J'ai donc une table avec toutes les communes de France (environ 7000). Cette table se nomme "commune" et il y a 3 champs:
idCommune
nomCommune
idAgence
Ensuite, j'ai une seconde table qui se nomme "agence" et dans laquelle j'ai 2 champs:
idAgence
nomAgence
En fonction de l'utilisateur connecté à l'outil et en fonction de l'agence à laquelle il appartient, j'aimerai qu'il est accès uniquement au commune qui le concerne (dans des menu déroulant, etc, etc, etc)..
Pour optimiser la chose, j'aimerai utiliser des index. J'ai cherché sur internet et j'ai effectivement trouvé des sites ou il était expliqué comment fonctionne les index mais je n'ai rien trouvé qui expliquait comment les créer (en sachant que je passe par phpMyAdmin)
Sous phpMyAdmin j'ai vu qu'on pouvait déclarer un champ comme étant un index. Dans mon cas c'est le champs "idAgence" qui fait la relation entre les 2 table et c'est ce champs que je vais donc utiliser dans ma requête comme clause.
Pour utiliser les index dans ce cas, est-ce qu'il suffit de déclarer les 2 champs "idAgence" de mes 2 tables comme étant des index ou y a t-il autre chose a faire?
Merci d'avance
-
Cela suffit !!!
Par contre en fonction du moteur de BDD choisie (MYISAM ou INNODB) tu peux gérer complètement le mode d'indexation en l'optimisant.
C'est avec le moteur INNODB menu gestion des relations (au centre de la strucure de ta table en dessous du dernier champs en bleu comme un lien)
Cordialement,
-
Plus précisément "Agence.idagence", identifiant une agence de manière unique, est une clef primaire (indexée d'office) et "commune.idAgence" doit être marqué comme indexé. Ensuite c'est le travail de MySQL de trouver quels sont les indexes optimums à utiliser pour chaque requête parmis ceux disponibles.
(Il est accessoirement possible de lui forcer la main mais c'est vraiment en désespoir de cause pour les cas tordus)
Pour savoir comment MySQL exécute une requête et quels indexes sont utilisés, il suffit de le lui demander : "EXPLAIN SELECT [...]"
Ensuite il est possible, mais non obligatoire, de déclarer "commune.idAgence" comme clef étrangère ce qui permettra, à condition d'utiliser InnoDb, d'avoir une vérification pour être certain de bien référencer une valeur légale de "Agence.idagence" (sinon la modification/insertion sera refusée par MySQL).
-
Avec un peu de retard merci pour vos réponses.. J'ai effectivement utilisé INNODB comme type de "tables"..
Je vais tester tout ca ;)