https://technet.microsoft.com/en-us/library/2008.04.dwperformance.aspx

оложим, у меня есть 2 таблицы, продукты и категории продуктов. Обе таблицы имеют отношение к 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 выполняет поиск по кластерному индексу, как и ожидалось. Но для таблиц Products он выполняет сканирование индекса кластера, что вызывает у меня сомнения. Почему FK не помогает улучшить производительность запросов?

Поэтому я должен создать индекс для Products.CategoryId. Когда я снова создаю план выполнения, обе таблицы выполняют поиск по индексу. И оценочная стоимость поддерева значительно снижается.

Мои вопросы:

Помимо FK помогает в ограничении отношений, есть ли у него какая-либо другая полезность? Улучшает ли это производительность запросов?

Должен ли я создать индекс для всех столбцов FK (понравился Products.CategoryId) во всех таблицах?

Ответы на вопрос(9)

Ваш ответ на вопрос