Предположим, у меня есть 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 выполняет поиск индекса кластеров, что является ожиданием. Но для Table Products он выполняет сканирование индекса кластеров, что вызывает у меня сомнения. Почему FK не помогает повысить производительность запросов?
Так что я должен создать индекс на Products.CategoryId. Когда я снова создаю план выполнения, обе таблицы выполняют поиск индекса. И расчетная стоимость поддерева значительно снижается.
Мои вопросы:
Кроме FK помогает в отношениях ограничения, у него есть какие-либо другие полезности? Улучшает ли производительность запросов?
Должен ли я создавать индекс во всех столбцах FK (понравившиеся продукты.CategoryId) во всех таблицах?
+1: Модель - это одно. Производительность - другое. –
Хорошие модели (как правило) работают лучше. –
«Внешние ключи - это инструмент реляционной целостности» - пожалуйста, используйте слово «реляционная» с осторожностью. Внешние ключи - это концепция базы данных, короткая рука для ограничения ссылочной целостности. Они не являются частью реляционной модели. Я полагаю, вы сделали опечатку. – onedaywhen