Diyelim ki 2 tablom var, Ürünler ve Ürün Kategorileri. Her iki tablonun CategoryId üzerinde ilişkisi vardır. Ve bu sorgu.
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;
Yürütme planı oluşturduğumda, ProductCategories tablosu beklenti olarak küme dizin araması gerçekleştirir. Ancak tablo Ürünleri için, beni şüphe uyandıran küme dizin taraması gerçekleştirir. FK neden sorgu performansını artırmaya yardımcı olmuyor?
Bu yüzden Products.CategoryId dizin oluşturmak gerekir. Yeniden yürütme planı oluşturduğumda, her iki tablo da dizin araması yapar. Ve tahmini alt ağaç maliyeti çok azalır.
Sorularım:
FK'nin ilişki kısıtlamasına yardımcı olmasının yanı sıra, başka bir faydası var mı? Sorgu performansını artırıyor mu?
Tüm tablolarda tüm FK sütunlarında dizin oluşturmalı mıyım (Like Products.CategoryId)?