在 Postgresql 主键定义中列的顺序是否重要?

在 Postgresql 主键定义中列的顺序是否重要?

如果需要,Postgresql 允许您使用一组列而不是一个列来定义主键,如下所示:

PRIMARY KEY(a_id, b_id)

但是,此定义中各列的顺序是否重要?上述内容与以下内容之间是否存在实际或实际差异:

PRIMARY KEY(b_id, a_id)

文档没有直接说明这一点。它暗示顺序不应该很重要,当我查询 information_catalog 表时,我没有看到任何值得注意的参数顺序差异。

但是,\d在两个使用替代定义的表上使用该命令时,输出中描述的列顺序确实发生了变化。显然,有些东西pg_catalog可以保留主键定义的顺序,但这是否意味着这两个定义之间存在任何功能差异?

谢谢

答案1

但是,此定义中各列的顺序是否重要?上述内容与以下内容之间是否存在实际或实际差异:

列的顺序PRIMARY KEY很重要,因为底层UNIQUEB 树索引是按照该顺序使用属性创建的,这会影响索引查找效率。通常,您需要首先选择最具选择性的属性。这只会影响性能,而不会改变查询的含义。

没有语义差异,因为UNIQUE (a, b)意味着UNIQUE (b,a)

相关内容