2010-09-06 6 views

Répondre

35

Chaque clé étrangère? Lorsque la sélectivité est faible (c'est-à-dire que de nombreuses valeurs sont dupliquées), un index peut être plus coûteux qu'un balayage de table. En outre, dans un environnement à haute activité (beaucoup plus d'activité d'insertion/mise à jour/suppression que d'interrogation), le coût de maintenance des index peut affecter les performances globales du système.

+1

OK. Y a-t-il une limite ou un seuil numérique qui peut déclencher la création d'un index? – GRGodoi

11

La raison de l'indexation d'une colonne de clé étrangère est la même que celle de l'indexation de toute autre colonne: créez un index si vous souhaitez filtrer les lignes par la colonne. Par exemple, si vous avez une table [Utilisateur] (ID int, Nom varchar (50)) et une table [UserAction] (UserID int, Action varchar (50)), vous voudrez probablement trouver ce que actions qu'un utilisateur particulier a fait. Par exemple, vous allez exécuter la requête suivante:

select ActionName from [UserAction] where UserID = @UserID 

Si vous ne souhaitez pas filtrer les lignes par la colonne alors il n'y a pas besoin de mettre un index sur elle. Et même si vous le faites, cela vaut la peine seulement si vous avez plus de 20 - 30 lignes.

+0

Etes-vous sûr que l'index ne sera pas utile lors de la validation de la clé étrangère lorsque j'exécute un insert sur UserAction? – GRGodoi

+1

Non. La validation est effectuée sur la table et la colonne contenant la clé primaire ou la contrainte unique (par exemple, [Utilisateur]. [ID]). Il n'est pas nécessaire de valider la colonne UserID de la table [UserAction]. Vous pouvez uniquement référencer une colonne ayant une clé primaire ou une contrainte unique afin qu'elle soit toujours indexée. – ItsMe

+2

L'autre action à prendre en compte est la suppression des lignes de 'User', ce qui amène le moteur à chercher des lignes dans' UserAction' basé sur 'UserID'. –

5

De MSDN: FOREIGN KEY Constraints

Création d'un index sur une clé étrangère est souvent utile pour les raisons suivantes:

  • changements aux contraintes PRIMARY KEY sont vérifiées avec des contraintes FOREIGN KEY dans les tableaux connexes.
  • Les colonnes de clés étrangères sont fréquemment utilisées dans les critères de jointure lorsque les données des tables associées sont combinées dans des requêtes en faisant correspondre la ou les colonnes de la contrainte FOREIGN KEY d'une table avec la ou les colonnes clés ou uniques de l'autre table.
Questions connexes