Postgresql 在两个索引表上连接与在外键上连接之间是否存在性能差异?

Postgresql 在两个索引表上连接与在外键上连接之间是否存在性能差异?,postgresql,Postgresql,假设引用完整性不存在,那么两个索引列上的连接与两个索引列上的连接(其中一个被定义为引用另一个)在性能方面有什么区别,特别是在性能方面有什么区别?看起来性能的提高仅仅来自添加索引;不来自外键本身,即外键仅提供引用完整性 对于涉及外键字段的插入和更新,您可能会受到轻微的性能影响,因为系统需要验证该项是否存在于引用的表中。看起来性能提升只来自添加索引;不来自外键本身,即外键仅提供引用完整性 您可能会在涉及外键字段的插入和更新上受到轻微的性能影响,因为系统需要验证引用表中是否存在该项。您是否运行了任何测

假设引用完整性不存在,那么两个索引列上的连接与两个索引列上的连接(其中一个被定义为引用另一个)在性能方面有什么区别,特别是在性能方面有什么区别?

看起来性能的提高仅仅来自添加索引;不来自外键本身,即外键仅提供引用完整性


对于涉及外键字段的插入和更新,您可能会受到轻微的性能影响,因为系统需要验证该项是否存在于引用的表中。

看起来性能提升只来自添加索引;不来自外键本身,即外键仅提供引用完整性


您可能会在涉及外键字段的插入和更新上受到轻微的性能影响,因为系统需要验证引用表中是否存在该项。

您是否运行了任何测试并发现了任何差异?是的,我有,但我想确保不只是我。您可以使用EXPLAIN Analysis进行测试以找出原因。您会发现它们具有完全相同的查询计划和完全相同的执行性能。相关:您是否运行了任何测试并发现了任何差异?是的,我有,但我想确保这不仅仅是我自己。您可以使用EXPLAIN Analysis进行测试以找出原因。您将发现它们具有完全相同的查询计划和完全相同的执行性能。相关:和。因此,FK意味着索引存在。INSERT必须更新索引,FK将使用该索引检查完整性。@muistooshort,FK表示另一个表中存在索引。dox还声明外键约束不会自动在引用列上创建索引。@HighlyUnregular:对。但FK意味着存在一个索引,可用于检查在对引用表执行插入或更新时是否满足FK。您可能希望引用表上有一个索引,以便在对引用表进行更新或删除时更快地检查FK。是吗?@muistoshort,是的。关键是你需要创造它;创建FK并不能为您解决这一问题。和因此,FK意味着索引存在。INSERT必须更新索引,FK将使用该索引检查完整性。@muistooshort,FK表示另一个表中存在索引。dox还声明外键约束不会自动在引用列上创建索引。@HighlyUnregular:对。但FK意味着存在一个索引,可用于检查在对引用表执行插入或更新时是否满足FK。您可能希望引用表上有一个索引,以便在对引用表进行更新或删除时更快地检查FK。是吗?@muistoshort,是的。关键是你需要创造它;创建FK并不能为您解决这一问题。