2010-02-22 2 views
5

J'ai une table Document qui est référencée par une tonne d'autres tables via des clés étrangères. J'essaye de supprimer un enregistrement de document, et selon mon plan d'exécution, SQL Server effectue un balayage d'index groupé sur chacune des tables de référence. C'est très douloureux.Optimisation de la suppression pour une table référencée par un grand nombre de clés étrangères

Je pensais avoir un FK fait automatiquement un index sur les champs FK? Ou ai-je tort? Dois-je vraiment faire le tour de ma base de données en mettant un index explicite sur chaque champ FK?

Répondre

4

Non, SQL Server ne crée pas automatiquement un index lorsque vous créez une clé étrangère. Vous devez créer les index vous-même.

poste connexe: Does a foreign key automatically create an index?

+0

Merci, ça répond à la question! Le mien est probablement un doublon ... –

1

Le nom « clé étrangère » est un peu trompeur car il est généralement associé à « clé primaire », qui est indexé automatiquement. Ainsi, les gens peuvent supposer que la clé étrangère est indexée, aussi.

L'accord est que "clé" se réfère ici à une contrainte. Donc, en ajoutant une clé étrangère, vous ajoutez réellement une contrainte. L'index est une affaire totalement différente.

+1

En fait, c'est encore différent. "Clé" signifie simplement que vous pouvez l'utiliser comme identifiant. Un index est une structure d'accès qui peut être facilement utilisée pour * implémenter * une clé. Le terme «clé étrangère» signifie «c'est une clé, mais pas une clé de cette table, c'est une clé d'une autre table« étrangère ». Et généralement, quand les gens disent «clé étrangère», ils signifient en réalité «contrainte de clé étrangère», comme dans, une contrainte qui renforce l'intégrité référentielle de la clé étrangère. –

Questions connexes