PostgreSQL的复合主键(PostgreSQL composite primary key)

2019-06-26 02:17发布

在MySQL中,当我创建一个复合主键,说的列X, Y, Z ,那么所有的三列变为自动索引。 做同样发生Postgres的?

Answer 1:

如果您创建一个复合主键,在(x, y, z) ,PostgreSQL的一个的帮助下实现了这个UNIQUE多列B树索引上(x, y, z) 此外,所有三个栏都必须NOT NULL ,当然,这是一个区别主要PRIMARY KEYUNIQUE INDEX

除了对你的数据有明显的限制, 多列索引也对查询比三个单独指数的表现有所不同的效果xyz

我们最近有关于一个非常深入的讨论在此相关的问题上dba.SE 。 结合实例,基准,讨论和展望即将到来的功能仅索引扫描的9.2版本 。

特别是,在主键(x, y, z)将加速与条件的查询x(x,y)(x,y,z)最佳。 这也将有助于使用查询上yz(y,z)(x,z)但远程度较轻。

如果您需要加快查询速度对后者的组合,你可能要更改列的顺序在你的PK约束或创建一个或多个额外的索引。



Answer 2:

是 :

PostgreSQL自动当唯一约束或主键为表中定义的唯一索引。 该指数涵盖构成主键或唯一约束(多列索引,如果合适的话)的列,并且是强制约束的机制。



Answer 3:

不,你会得到一个指数为三列的主键。



文章来源: PostgreSQL composite primary key