Załóżmy, że mam 2 tabele, produkty i kategorie produktów. Obie tabele mają relację na CategoryId. I to jest pytanie.
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;
Kiedy tworzę plan wykonania, tabela ProductCategories przeprowadza przeszukiwanie indeksu klastra, co jest zgodne z oczekiwaniami. Ale w przypadku produktów tabelowych wykonuje skanowanie indeksu klastra, co budzi wątpliwości. Dlaczego FK nie pomaga poprawić wydajności zapytań?
Więc muszę utworzyć indeks na Products.CategoryId. Kiedy ponownie tworzę plan wykonania, obie tabele wykonują przeszukiwanie indeksu. Szacowany koszt poddrzewa jest znacznie obniżony.
Moje pytania to:
Oprócz FK pomaga w ograniczaniu relacji, czy ma jakąś inną użyteczność? Czy poprawia wydajność zapytań?
Czy powinienem utworzyć indeks dla wszystkich kolumn FK (takich jak Products.CategoryId) we wszystkich tabelach?