79 votes

Chaque clé étrangère SQL Server doit-elle avoir un index correspondant?

Est-il recommandé de créer un index pour chaque clé étrangère d'une base de données SQL Server?

62voto

SQLMenace Points 68670

Oui, c'est une bonne pratique, voir ici: quand SQL Server a-t-il cessé de mettre des index sur des colonnes de clé étrangère? Faites défiler l'écran vers le bas. Y at-il des avantages à indexer des colonnes de clé étrangère? section

56voto

onedaywhen Points 24594

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

22voto

ItsMe Points 91

La raison de l'indexation d'une colonne de clé étrangère est la même que la raison de l'indexation de tout autre colonne: créer un index si vous allez filtrer les lignes par colonne.

Par exemple, si vous avez de la table [Utilisateur] (ID int, Nom varchar(50)) et de la table [UserAction] (UserID int, Action de type varchar(50)), vous serez sans doute amené à être en mesure de trouver ce que les actions d'un utilisateur en particulier en fait. Par exemple, vous exécutez la requête suivante:

select ActionName from [UserAction] where UserID = @UserID

Si vous n'avez pas l'intention de filtrer les lignes par la colonne puis il n'est pas nécessaire de mettre un index sur elle. Et même si vous faites cela en vaut la peine seulement si vous avez plus de 20 - 30 lignes.

6voto

Serghei Belyi Points 21

À partir de MSDN: les Contraintes de CLÉ ÉTRANGÈRE

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

  • Des modifications à des contraintes de CLÉ PRIMAIRE sont vérifiées avec les contraintes de CLÉS ÉTRANGÈRES des tables liées.
  • Les colonnes de clé étrangère sont fréquemment utilisés dans les critères de jointure lorsque les données provenant de tables liées sont combinées dans des requêtes par la correspondance de la ou des colonnes de la contrainte de CLÉ ÉTRANGÈRE d'une table dont la clé primaire ou unique ou les colonnes dans l'autre table.

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