假设我有2个表格,产品和产品类别。两个表在CategoryId上都有关系。这就是查询。SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS CategoryFROM Products pINNER JOIN ProductCategories c ON p.CategoryId = c.CategoryIdWHERE c.CategoryId = 1;当我创建执行计划时,表ProductCategories会执行群集索引查找,这与预期的一样。但是对于表Products,它执行集群索引扫描,这使我感到怀疑。为什么FK不能帮助提高查询性能?因此,我必须在Products.CategoryId上创建索引。当我再次创建执行计划时,两个表都执行索引查找。并且估计的子树成本大大降低了。我的问题是:除了FK有助于关系约束之外,它还有其他用途吗?它会提高查询性能吗?是否应该在所有表的所有FK列(如Products.CategoryId)上创建索引?
3 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
外键是用于确保数据库完整性的DBMS概念。
对性能的任何影响/改进都将特定于所使用的数据库技术,并且仅次于外键。
在SQL Server中,优良作法是确保所有外键上至少都具有非聚集索引。
我希望这可以为您解决问题,但请随时索取更多详细信息。
- 3 回答
- 0 关注
- 1465 浏览
添加回答
举报
0/150
提交
取消