【发布时间】:2010-10-05 03:57:01
【问题描述】:
假设我有 2 个表,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,它执行集群索引扫描,这让我怀疑。为什么 FK 无助于提高查询性能?
所以我必须在 Products.CategoryId 上创建索引。当我再次创建执行计划时,两个表都执行索引查找。并且估计子树成本降低了很多。
我的问题是:
FK 除了有助于关系约束,还有其他用处吗?它会提高查询性能吗?
是否应该在所有表中的所有 FK 列(喜欢 Products.CategoryId)上创建索引?
【问题讨论】:
标签: sql sql-server performance indexing foreign-keys