Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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/03/2007, 16h15   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 31
Points : 11
Points : 11
Par défaut 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
toffff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 16h23   #2
Membre du Club
 
Inscription : novembre 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 120
Points : 55
Points : 55
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,
beberd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 15h08   #3
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
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).
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 16h05   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 31
Points : 11
Points : 11
Avec un peu de retard merci pour vos réponses.. J'ai effectivement utilisé INNODB comme type de "tables"..

Je vais tester tout ca
toffff 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 05h24.


 
 
 
 
Partenaires

Hébergement Web