外键比索引好吗?

JHF*_*HFB 5 sql-server-2008 sql-server

我有一个应用程序数据库的复制副本。我正在探索如何更改约束和索引以更好地满足我们的报告要求。因为这是应用程序数据库的副本,所以我知道参照完整性正在检查中。

此副本中的主键和外键关系有何影响?如果我仔细设置我需要的索引,外键有什么好处吗?有什么害处吗?

Tho*_*ger 19

外键约束和索引是数据库中两个完全独立的实体。正如您在问题中明确指出的那样,外键关系是为了确保参照完整性。如果您的数据库副本仅用于 OLAP,那将不会真正发挥作用(只要您没有对它进行任何 DML 批处理)。

索引将影响您的查询性能。如果上述情况属实(不INSERTUPDATE、 或DELETE),您就不必太在意索引维护的开销。

因此,您可以明智地选择索引以最大限度地提高性能。但是,如果没有看到有关您的数据的更多详细信息以及已经存在的内容,则只能为您提供概括性的想法。

编辑:根据Grant Fritchey的博客文章,由于外键约束可能会提高性能,因为查询优化器可以由于约束的引用方面而省略某些不必要的操作。有关更多信息,请参阅 Grant 的博文:Do Foreign Key Constraints Help Performance?

  • 略有不同意见。外键约束可以而且确实会影响性能和执行计划。这是一篇关于它的博客文章:http://www.scarydba.com/2010/11/22/do-foreign-key-constraints-help-performance/。不,它们不能代替索引。它们与索引结合使用。 (4认同)
  • 对我来说太多了,但这使答案更好,是的。 (2认同)