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


2

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

PRIMARY KEY(a_id, b_id)

但是这个定义中列的顺序是否显着?上面和下面之间是否有任何实际或实际的区别:

PRIMARY KEY(b_id, a_id)

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

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

谢谢


你做过一个简单的实验来找到答案吗?不难发现自己。
朱利安奈特

Answers:


2

但是这个定义中列的顺序是否显着?上面和下面之间是否有任何实际或实际的区别:

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

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


1
谢谢,这正是我正在寻找的答案类型。
Radmilla Mustafa 2015年

关于性能影响以及排序如何与查询的WHERE子句相关的更多细节,请
参见
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.