2009-11-12 6 views
3

J'utilise phpMyAdmin. Pour définir une contrainte de clé étrangère avec InnoDB (sous le lien "Relation View" dans l'onglet Structure), il semble que je doive ajouter un index pour le champ auquel je souhaite ajouter la restriction. Cela a évidemment un impact sur les performances des insertions/mises à jour sur la table, en particulier s'il y a plusieurs contraintes que je veux ajouter. Est-il possible de spécifier une contrainte de clé étrangère ou une intégrité relationnelle dans InnoDB sans avoir besoin de créer un index pour le champ requis?Est-ce que MySQL InnoDB requiert toujours un index pour chaque contrainte de clé étrangère?

Un grand merci JS, London

Répondre

7

De l'MySQL reference manual:

InnoDB nécessite des index sur des clés étrangères et clés référencées de sorte que les contrôles de clé étrangère peuvent être rapides et non nécessitent un balayage de table. Dans la table de référence , il doit y avoir un index où les colonnes de clé étrangère sont répertoriées en tant que premières colonnes dans le même ordre . Un tel index est créé sur le tableau de référence automatiquement s'il n'existe pas. (Ceci est en contraste avec certaines anciennes versions, en qui indexe devaient créer explicitement ou la création d'étrangers principales contraintes échoueraient.)

1

une clé étrangère fait référence contraint 1 pour l'autre. Une clé étrangère est également un index.
Donc, oui, vous devez indexer collumn (soit avec une clé unique soit avec une clé étrangère) pour les utiliser dans une contrainte de clé étrangère.

Il y a 3 types d'indices disponibles:
- clé primaire
- index unique
- index non unique

+0

Merci pour votre réponse. –

Questions connexes