305 votes

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

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

5voto

Wolf5370 Points 936

Comme indiqué, c'est le cas pour InnoDB. Au début, j'ai pensé qu'il était étrange que beaucoup d'autres (en particulier MS SQL et DB2) ne le fassent pas. Les balayages d'espace de table ne sont meilleurs que les balayages d'index que lorsqu'il y a très peu de lignes de table - donc dans la grande majorité des cas, une clé étrangère devrait être indexée. C'est alors que j'ai compris que cela ne signifie pas nécessairement qu'il doit s'agir d'un index autonome (une seule colonne), comme c'est le cas dans l'index FK automatique de MySQL. C'est peut-être la raison pour laquelle MS SQL, DB2 (Oracle, je ne suis pas sûr), etc. laissent le choix au DBA ; après tout, des index multiples sur de grandes tables peuvent poser des problèmes de performance et d'espace.

2 votes

Vous soulevez un bon point au sujet des index à clé composite ; cependant, MySQL abandonnera automatiquement/silencieusement un index à clé unique généré automatiquement si un index à clé composite nouvellement créé remplit l'obligation de rendre les vérifications de clé étrangère rapides. Pour être honnête, je ne sais pas pourquoi MS SQL, DB2 et d'autres ne le font pas. Ils ont peu d'excuses. Je ne peux pas penser à un cas d'utilisation où un index généré automatiquement sur les clés étrangères serait nuisible.

3voto

Navrattan Yadav Points 872

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

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

0voto

Steve Giáp Points 1

Oui, Mysql indexe automatiquement les clés étrangères lorsque vous créez une table qui a une clé étrangère vers une autre.

-2voto

Ali Raza Points 1

Il n'est pas possible d'obtenir la clé d'indexation automatiquement en utilisant

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

Nom de la table que vous avez créée par exemple les photographies et FOREIGN KEY par exemple photograph_id . Le code devrait être le suivant

ALTER TABLE photographs ADD INDEX (photograph_id);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X