如果我有两个表,它们两个都有一个整数作为主键。
第一个表通过FK引用第二个表的主键。
在两个表上我的ID列上都有主键索引
我在
table1.ref_field
上创建了一个FK约束,引用了第二个表(table2.id
)的PK >并且在table1.ref_field
上添加了一个索引这是组织这些索引(主键和外键)的最佳方法吗?
#1 楼
您的设计很好。如果遇到性能问题(在设计时无法知道),则应在table1.ref_field列上创建索引,其顺序(ASC)与table2.id列相同。这将提高表/列之间的联接性能。维护任何索引都有开销,因此您要权衡成本与性能改进的好处。不幸的是,PostgreSQL不会自动在引用其他列的外键列上创建此类索引。您必须自己做。
这是一个关于同一主题的StackOverflow问题:
外键和主键的Postgres和索引
这是一个查询,可帮助您确定从中添加此类索引可能会从中受益:
Postgresql:外键索引
评论
并不总是很不幸-如果您不从引用表中删除,那么它可以为您节省大量I / O和CPU,避免维护未使用的索引。我确实认为应该默认创建它,只是有一个选项可以禁止创建它。
–克雷格·林格(Craig Ringer)
13年11月25日在5:32
Craig Ringer不仅DELETE可能会对此产生影响,如果从partent表到子表中进行选择,那么您也会遇到性能问题。 Oracle的此文档详细说明了:asktom.oracle.com/pls/asktom/…
–卢西亚诺·安德列斯·马蒂尼(Luciano Andress Martini)
19年6月28日在13:48