Est-il recommandé de créer un index pour chaque clé étrangère d'une base de données SQL Server?
Réponses
Trop de publicités?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
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.
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.
À 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.