Припустимо, у мене є 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 він виконує сканування індексу кластера, що викликає сумніви. Чому FK не допомагає покращити ефективність запитів?
Тому я повинен створити індекс на Products.CategoryId. Коли я знову створюю план виконання, обидві таблиці виконують пошук індексу. І орієнтовна вартість піддерев'я значно зменшується.
Мої запитання:
Окрім ФК допомагає у обмеженні стосунків, чи має вона якусь іншу корисність? Це покращує ефективність запитів?
Чи потрібно створити індекс у всіх стовпцях FK (сподобалось Products.CategoryId) у всіх таблицях?