Предположим, у меня есть 2 таблицы, Продукты и ProductCategories. Обе таблицы имеют отношение к CategoryId. И это запрос.
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;
Когда я создаю план выполнения, таблица ProductCategories выполняет поиск индекса кластера, что является ожидаемым. Но для Table Products он выполняет сканирование индекса кластеров, что вызывает у меня сомнения. Почему FK не помогает повысить производительность запросов?
Поэтому мне нужно создать индекс в Products.CategoryId. Когда я снова создаю план выполнения, обе таблицы выполняют поиск индекса. И оцененная стоимость поддерева значительно сокращается.
Мои вопросы:
-
Кроме того, FK помогает в ограничении связей, имеет ли он какую-либо другую полезность? Улучшает ли производительность запросов?
-
Должен ли я создавать индекс во всех столбцах FK (понравившиеся продукты .CategoryId) во всех таблицах?