Postgresql 主键定义中列的顺序重要吗?

Rad*_*afa 11 postgresql

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

PRIMARY KEY(a_id, b_id)
Run Code Online (Sandbox Code Playgroud)

但是这个定义中的列顺序重要吗?上述和以下之间是否有任何实际或实际的差异:

PRIMARY KEY(b_id, a_id)
Run Code Online (Sandbox Code Playgroud)

该文档没有直接解决这个问题。这意味着顺序不应该很重要,并且当我查询 information_catalog 表时,我没有看到任何需要注意参数顺序差异的内容。

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

谢谢

Cra*_*ger 13

但是这个定义中的列顺序重要吗?上述和以下之间是否有任何实际或实际的差异:

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

没有语义差异,因为UNIQUE (a, b)暗示UNIQUE (b,a)