9
votes

Mysql - clé étrangère unique

Je dois faire l'une des clés étrangères uniques. Le problème est que je reçois le message suivant de la phpmyadmin: xxx

Donc, ma question est la suivante: Devrais-je être dérangé? Est-il vraiment important de ne pas avoir de tels index?


0 commentaires

4 Réponses :


16
votes

Chaque colonne avec une clé (primaire, étranger) a besoin d'un index. Même avec la colonne étant unique. Vous avez probablement créé deux index (un lors de la création de FK et d'une sur une contrainte unique). Si tel est le cas, laissez tomber un de ces index.

Il est surcharge pour la DB pour conserver deux index équivalents.


6 commentaires

Vous pouvez ajouter que la création d'une clé étrangère dans MySQL créera en fait un index sur les colonnes référencées et référencées, à moins que l'on n'existe déjà.


Vous dites donc que je peux supprimer un index unique et une colonne restera unique? J'ai ajouté cet index en cochant "unique" dans MySQL Workbench.


Actuellement, je suppose que vous avez là 2 index d'index de types et uniques. Si tel est le cas, vous devez déposer l'index. L'unique est nécessaire pour être unique et suffit pour FK.


Voir dev.mysql.com/doc/refman/5.0/fr /creee-index.html , unique est un type particulier d'index et d'index est index général.


+1 pour la référence aux documents. Mais cela cause-t-il des problèmes lorsque les deux index sont les mêmes? J'essaie de mettre à jour un enregistrement qui a deux index (à la fois sur la clé étrangère) et ma logique échoue parfois. La clé d'index peut-elle ralentir cette opération?


Pas vraiment sûr de ce que tu veux dire. Cela ne fait aucun mal, il devrait toujours agir correctement. Les opérations de mise à jour pourraient un peu plus lentes, car DB doit conserver deux index plutôt qu'un.



7
votes
mysql > create unique index index_bar_id on foos(bar_id);
mysql > alter table foos add constraint index_bar_id foreign key (bar_id) references bars (id);
Read more at http://sixarm.com/about/mysql-create-indexes-foreign-keys-constraints.html

0 commentaires

1
votes

Tout simplement pour que vous sachiez, il semble que vous puissiez également avoir des clés étrangères uniques: xxx


0 commentaires

3
votes

Pour l'avenir, si vous souhaitez effectuer votre clé étrangère unique, vous pouvez simplement modifier votre colonne de clé étrangère comme celle-ci:

ALTER TABLE your_table
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;


0 commentaires