假设我有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)上创建索引?