假设我有两个表,Products和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执行集群索引搜索,这是预期的。但是对于表Products,它执行了集群索引扫描,这让我感到怀疑。为什么外键没有帮助提高查询性能?
因此,我不得不在Products.CategoryId上创建索引。当我再次创建执行计划时,两个表都执行索引搜索。并且估计的子树成本大大降低了。
我的问题是:
除了FK对关系约束有所帮助外,它是否还具有其他用处?它是否可以提高查询性能?
我应该在所有表中的所有FK列(例如Products.CategoryId)上创建索引吗?
CategoryId
上添加某种索引(主键/次键/外键)。而该列的数据类型非常关键。 - undefined