在 MySQL 中,当我创建复合主键时,例如使用 columns X, Y, Z
,所有三列都会自动成为索引。Postgres 也会发生同样的情况吗?
问问题
28144 次
3 回答
117
如果你创建一个复合主键 on (x, y, z)
,PostgreSQL 会借助一个UNIQUE
多列 btree 索引 on来实现这一点(x, y, z)
。此外,所有三列都是(隐式),这是 a和 aNOT NULL
之间的主要区别。PRIMARY KEY
UNIQUE INDEX
除了对数据的明显限制外,多列索引x
对查询性能的影响也与、y
和上的三个单独索引有所不同z
。
dba.SE的相关讨论:
通过示例、基准、讨论和展望Postgres 9.2 中仅索引扫描的新功能。
特别是,主键 on将(x, y, z)
加速条件为 onx
或最佳的查询。它还有助于查询、或,但程度要小得多。(x,y)
(x,y,z)
y
z
(y,z)
(x,z)
如果您需要加快对后一种组合的查询,您可能需要更改 PK 约束中的列顺序和/或创建一个或多个附加索引。看:
于 2012-07-05T21:03:35.563 回答
2
不,你得到一个三列主键的索引。
于 2012-07-05T20:54:43.230 回答
0
是的:
当为表定义唯一约束或主键时,PostgreSQL 会自动创建唯一索引。索引涵盖构成主键或唯一约束的列(多列索引,如果适用),并且是强制执行约束的机制。
于 2012-07-05T20:42:48.663 回答