Giả sử tôi có 2 bảng, Sản phẩm và Danh mục sản phẩm. Cả hai bảng có mối quan hệ trên CategoryId. Và đây là truy vấn.
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;
Khi tôi tạo kế hoạch thực hiện, bảng ProductC loại thực hiện tìm kiếm chỉ mục cụm, đó là như mong đợi. Nhưng đối với Sản phẩm bảng, nó thực hiện quét chỉ mục cụm, điều này khiến tôi nghi ngờ. Tại sao FK không giúp cải thiện hiệu suất truy vấn?
Vì vậy, tôi phải tạo chỉ mục trên Products.C CategoryId. Khi tôi tạo kế hoạch thực hiện lại, cả hai bảng thực hiện tìm kiếm chỉ mục. Và ước tính chi phí cây con được giảm rất nhiều.
Câu hỏi của tôi là:
Bên cạnh FK giúp hạn chế mối quan hệ, nó có hữu ích nào khác không? Nó có cải thiện hiệu năng truy vấn không?
Tôi có nên tạo chỉ mục trên tất cả các cột FK (thích Sản phẩm. Thể loại) trong tất cả các bảng không?