如果需要,Postgresql 允许您使用一组列而不是一个列来定义主键,如下所示:
PRIMARY KEY(a_id, b_id)
但是,此定义中各列的顺序是否重要?上述内容与以下内容之间是否存在实际或实际差异:
PRIMARY KEY(b_id, a_id)
文档没有直接说明这一点。它暗示顺序不应该很重要,当我查询 information_catalog 表时,我没有看到任何值得注意的参数顺序差异。
但是,\d
在两个使用替代定义的表上使用该命令时,输出中描述的列顺序确实发生了变化。显然,有些东西pg_catalog
可以保留主键定义的顺序,但这是否意味着这两个定义之间存在任何功能差异?
谢谢
答案1
但是,此定义中各列的顺序是否重要?上述内容与以下内容之间是否存在实际或实际差异:
列的顺序PRIMARY KEY
很重要,因为底层UNIQUE
B 树索引是按照该顺序使用属性创建的,这会影响索引查找效率。通常,您需要首先选择最具选择性的属性。这只会影响性能,而不会改变查询的含义。
没有语义差异,因为UNIQUE (a, b)
意味着UNIQUE (b,a)
。