Supposons que j'ai 2 tables, produits et catégories de produits. Les deux tables ont une relation sur CategoryId. Et c'est la question.
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
Lorsque je crée un plan d'exécution, la table ProductCategories effectue une recherche d'index de cluster, ce qui est attendu. Mais pour les produits de table, il effectue une analyse d'index de cluster, ce qui me fait douter. Pourquoi FK n'aide pas à améliorer les performances des requêtes?
Je dois donc créer un index sur Products.CategoryId. Lorsque je crée à nouveau le plan d'exécution, les deux tables effectuent une recherche d'index. Et le coût estimé du sous-arbre est considérablement réduit.
Mes questions sont:
A côté de FK aide sur la contrainte relationnelle, a-t-il une autre utilité? Améliore-t-il les performances des requêtes?
Dois-je créer un index sur toutes les colonnes FK (comme Products.CategoryId) dans toutes les tables?