Est-ce une bonne pratique de créer un index pour chaque clé étrangère dans une base de données SQL Server?Est-ce que toutes les clés étrangères SQL Server doivent avoir un index correspondant?
Répondre
Oui, c'est une bonne pratique, voir ici: When did SQL Server stop putting indexes on Foreign Key columns? faites défiler vers le Y at-il des avantages à l'indexation des colonnes de clé étrangère? section
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.
OK. Y a-t-il une limite ou un seuil numérique qui peut déclencher la création d'un index? – GRGodoi
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.
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
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
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'. –
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.
- 1. GetOleDbSchemaTable Clés étrangères sur Sql Server 2005
- 2. SQL Server Création de plusieurs clés étrangères
- 3. Les vues SQL Server peuvent-elles avoir des clés primaires et étrangères?
- 4. Comment trouver toutes les clés étrangères?
- 5. SQL Server et index
- 6. Supprimez toutes les clés étrangères dans une table
- 7. Comment lister toutes les clés étrangères avec "WITH NOCHECK" dans SQL Server
- 8. index sur des clés primaires et étrangères
- 9. SQL: que font exactement les clés primaires et les index?
- 10. Que sont les clés étrangères MySQL?
- 11. SQL Server 2005 - Clés étrangères avec suppression en cascade
- 12. Tables Trigger SQL Server avec des clés étrangères
- 13. Clés étrangères croisées dans SQL
- 14. XSD DataSets et ignorer les clés étrangères
- 15. SQL Server 2000 - requête relations clés étrangères d'une table
- 16. Rechercher les clés étrangères utilisées
- 17. Index SQL Server Scripting
- 18. Mysql: supprimer par programme toutes les clés étrangères
- 19. Entity Framework utilisation des index et des clés étrangères
- 20. Les clés étrangères dans les tables
- 21. Comment puis-je trouver des clés étrangères non indexées dans SQL Server
- 22. Clés étrangères rompues dans Rails
- 23. Plusieurs clés étrangères?
- 24. Rendre les clés étrangères uniques dans JPA
- 25. SQL Script pour modifier toutes les clés étrangères à ajouter ON SUPPRIMER CASCADE
- 26. Clés et indicateurs étrangers SQL Server 2005
- 27. syntaxe SQL (INSERTS avec plusieurs clés étrangères)
- 28. Clés étrangères et erreurs MySQL
- 29. SQL Server: afficher pour conserver les clés étrangères de la table?
- 30. Clés étrangères - Que font-elles pour moi?
C'est une bonne pratique dans certains cas, mais pas pour * chaque * clé étrangère. –