在MySQL中,当我创建一个复合主键,说的列X, Y, Z
,那么所有的三列变为自动索引。 做同样发生Postgres的?
Answer 1:
如果您创建一个复合主键,在(x, y, z)
,PostgreSQL的一个的帮助下实现了这个UNIQUE
多列B树索引上(x, y, z)
此外,所有三个栏都必须NOT NULL
,当然,这是一个区别主要PRIMARY KEY
和UNIQUE INDEX
。
除了对你的数据有明显的限制, 多列索引也对查询比三个单独指数的表现有所不同的效果x
, y
和z
。
我们最近有关于一个非常深入的讨论在此相关的问题上dba.SE 。 结合实例,基准,讨论和展望即将到来的功能仅索引扫描的9.2版本 。
特别是,在主键(x, y, z)
将加速与条件的查询x
, (x,y)
或(x,y,z)
最佳。 这也将有助于使用查询上y
, z
, (y,z)
或(x,z)
但远程度较轻。
如果您需要加快查询速度对后者的组合,你可能要更改列的顺序在你的PK约束或创建一个或多个额外的索引。
Answer 2:
是 :
PostgreSQL自动当唯一约束或主键为表中定义的唯一索引。 该指数涵盖构成主键或唯一约束(多列索引,如果合适的话)的列,并且是强制约束的机制。
Answer 3:
不,你会得到一个指数为三列的主键。
文章来源: PostgreSQL composite primary key