Question MySQL indexe-t-il automatiquement les colonnes de clé étrangère?


MySQL indexe-t-il automatiquement les colonnes de clé étrangère?


190
2017-11-20 04:19


origine


Réponses:


Oui, mais seulement sur Innodb. Innodb est le seul format de table actuellement livré avec des clés étrangères implémentées


166
2017-11-20 04:33



Apparemment, un index est créé automatiquement comme spécifié dans le lien robert a posté.

InnoDB nécessite des index sur les clés étrangères et les clés référencées afin que les vérifications de clés étrangères puissent être rapides et ne nécessitent pas d'analyse de table. Dans la table de référence, il doit y avoir un index où les colonnes de la clé étrangère sont répertoriées comme les premières colonnes du même ordre. Un tel index est créé automatiquement sur la table de référence s'il n'existe pas. (Cela contraste avec certaines versions plus anciennes, dans lesquelles les index devaient être créés explicitement ou la création de contraintes de clé étrangère échouait). Index_name, s'il est donné, est utilisé comme décrit précédemment.

InnoDB et les contraintes FOREIGN KEY


97
2017-07-17 19:22



Oui, voir InnoDB et les contraintes FOREIGN KEY.


20
2017-11-20 04:23



Vous ne recevez pas l’index automatiquement si vous faites un ALTER TABLE (au lieu de CREATE TABLE), au moins selon les docs (le lien est pour 5.1 mais c'est pareil pour 5.5):

[...] Lorsque vous ajoutez une contrainte de clé étrangère à une table à l'aide d'ALTER TABLE, n'oubliez pas de créer d'abord les index requis.


10
2018-02-08 08:50



Comme indiqué, il le fait pour InnoDB. Au début, j'ai trouvé étrange que beaucoup d'autres (en particulier MS SQL et DB2) ne le fassent pas. Les analyses TableSpace ne sont meilleures que les analyses d'index lorsqu'il y a très peu de lignes de table. Dans la grande majorité des cas, une clé étrangère devrait donc être indexée. Ensuite, ça m'a un peu frappé - cela ne signifie pas nécessairement qu'il doit s'agir d'un index autonome (une colonne) - où il se trouve dans l'index FK automatique de MySQL. Donc, peut-être est la raison pour laquelle MS SQL, DB2 (Oracle je ne suis pas sûr), etc. laisser à la DBA; après tout, plusieurs index sur de grandes tables peuvent causer des problèmes de performances et d'espace.


4
2018-06-28 23:35



Pour ceux qui cherchent des citations de 5.7  docs:

MySQL nécessite des index sur les clés étrangères et les clés référencées afin que   Les contrôles de clé étrangère peuvent être rapides et ne nécessitent pas de scan de table. dans le   table de référence, il doit y avoir un index où la clé étrangère   les colonnes sont répertoriées en tant que premières colonnes dans le même ordre. Un tel   index est créé automatiquement sur le tableau de référence s'il ne le fait pas   exister. Cet index pourrait être supprimé plus tard, si vous créez   un autre index qui peut être utilisé pour appliquer la contrainte de clé étrangère.   nom_index, s'il est donné, est utilisé comme décrit précédemment.


4
2017-07-25 08:51



Oui, Innodb fournir ceci. Vous pouvez mettre un nom de clé étrangère après FOREIGN KEY clause ou laissez-le pour laisser MySQL créer un nom pour vous. MySQL crée automatiquement un index avec le foreign_key_name prénom.

CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action

2
2017-11-24 11:56



Il n'est pas possible d'utiliser la clé d'index automatiquement

ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)

Nom de la table que vous avez créée par exemple des photographies et FOREIGN KEY par exemple photograph_id. Le code devrait être comme ça

ALTER TABLE photographs ADD INDEX (photograph_id);

-2
2017-12-24 06:45