需要外键索引


30

我在索引,主键和外键上苦苦挣扎,而且都需要全部使用。

如果我有两个表,它们两个都有一个整数作为主键。
第一个表通过FK引用第二个表的主键。

  • 在两个表上,我在ID列上都有一个主键索引
  • 我在table1.ref_field参照第二张表格(table2.id)的PK时创建了FK约束
  • 我在上添加了一个索引 table1.ref_field

这是组织这些索引(主键和外键)的最佳方法吗?

Answers:


30

您的设计很好。如果遇到性能问题(在设计时无法知道),则应在table1.ref_field列上创建索引,其顺序(ASC)与table2.id列相同。这将提高表/列之间的联接性能。维护任何索引都有开销,因此您要权衡该成本与性能改进的好处。

不幸的是,PostgreSQL不会自动在引用其他列的外键列上创建此类索引,因此您必须自己做。

这是关于同一主题的StackOverflow问题:

Postgres和外键和主键索引

这是一个查询,可帮助您确定从添加此类索引中可以从中受益的地方:

PostgreSQL:外键索引


并不总是很不幸-如果您不是DELETE从引用表中来的话,那么它可以为您节省很多I / O和CPU,避免维护未使用的索引。我确实认为应该默认创建它,只是有一个选项可以禁止创建它。
Craig Ringer 2013年

Craig Ringer不仅DELETE可能会对此产生影响,如果从partent表到子表中进行选择,那么您也会遇到性能问题。:这个从Oracle文档解释更asktom.oracle.com/pls/asktom/...
777Anon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.