猿问

外键是否可以提高查询性能?

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


慕妹3146593
浏览 1466回答 3
3回答

杨__羊羊

外键是用于确保数据库完整性的DBMS概念。对性能的任何影响/改进都将特定于所使用的数据库技术,并且仅次于外键。在SQL Server中,优良作法是确保所有外键上至少都具有非聚集索引。我希望这可以为您解决问题,但请随时索取更多详细信息。
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答