PostgreSQL复合主键

use*_*855 33 postgresql indexing composite-primary-key

在MySQL中,当我创建复合主键(比如列)时X, Y, Z,所有三列都会自动成为索引.Postgres会发生同样的事吗?

Erw*_*ter 80

如果您创建复合主键,则(x, y, z)PostgreSQL在一个UNIQUE多列btree索引的帮助下实现此功能(x, y, z).此外,NOT NULL当然,所有三列都必须是a PRIMARY KEY和a 之间的主要区别UNIQUE INDEX.

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

我们最近在dba.SE上就这个相关问题进行了非常彻底的讨论.通过示例,基准,讨论和对9.2版本中仅索引扫描功能的展望.

特别是,主键(x, y, z)可以加速查询条件x,(x,y)或者(x,y,z)最佳.这也将有助于使用查询上y,z,(y,z)(x,z)但远程度较轻.

如果需要加快对后一种组合的查询,可能需要更改PK约束中的列顺序或创建一个或多个其他索引.