30 我在索引,主键和外键上苦苦挣扎,而且都需要全部使用。 如果我有两个表,它们两个都有一个整数作为主键。 第一个表通过FK引用第二个表的主键。 在两个表上,我在ID列上都有一个主键索引 我在table1.ref_field参照第二张表格(table2.id)的PK时创建了FK约束 我在上添加了一个索引 table1.ref_field 这是组织这些索引(主键和外键)的最佳方法吗? postgresql database-design index foreign-key primary-key — U source
30 您的设计很好。如果遇到性能问题(在设计时无法知道),则应在table1.ref_field列上创建索引,其顺序(ASC)与table2.id列相同。这将提高表/列之间的联接性能。维护任何索引都有开销,因此您要权衡该成本与性能改进的好处。 不幸的是,PostgreSQL不会自动在引用其他列的外键列上创建此类索引,因此您必须自己做。 这是关于同一主题的StackOverflow问题: Postgres和外键和主键索引 这是一个查询,可帮助您确定从添加此类索引中可以从中受益的地方: PostgreSQL:外键索引 — 彼得411 source 并不总是很不幸-如果您不是DELETE从引用表中来的话,那么它可以为您节省很多I / O和CPU,避免维护未使用的索引。我确实认为应该默认创建它,只是有一个选项可以禁止创建它。 — Craig Ringer 2013年 Craig Ringer不仅DELETE可能会对此产生影响,如果从partent表到子表中进行选择,那么您也会遇到性能问题。:这个从Oracle文档解释更asktom.oracle.com/pls/asktom/... — 777Anon
DELETE
从引用表中来的话,那么它可以为您节省很多I / O和CPU,避免维护未使用的索引。我确实认为应该默认创建它,只是有一个选项可以禁止创建它。