Angenommen, ich habe 2 Tabellen, Produkte und Produktkategorien. Beide Tabellen haben eine Beziehung zu CategoryId. Und das ist die Frage.
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;
Wenn ich einen Ausführungsplan erstelle, führt die Tabelle ProductCategories die erwartete Clusterindexsuche durch. Bei Tabellenprodukten wird jedoch ein Cluster-Index-Scan durchgeführt, was mich zweifeln lässt. Warum hilft FK nicht, die Abfrageleistung zu verbessern?
Also muss ich einen Index für Products.CategoryId erstellen. Wenn ich den Ausführungsplan erneut erstelle, führen beide Tabellen eine Indexsuche durch. Die geschätzten Teilbaumkosten werden erheblich reduziert.
Meine Fragen sind:
Hat FK neben den Hilfen bei Beziehungsbeschränkungen noch andere Vorteile? Verbessert es die Abfrageleistung?
Sollte ich einen Index für alle FK-Spalten (beliebte Products.CategoryId) in allen Tabellen erstellen?