多列约束是为每一列创建索引还是统一索引?

Does a multicolumn constraint create indexes for each column or a unified index?

我对关联 table 中的两列有唯一约束,例如:

CREATE TABLE PersonImage (
id serial PRIMARY KEY,
person_id integer REFERENCES Person (id),
image_id integer REFERENCES Image (id),
CONSTRAINT person_image_uc UNIQUE (person_id, image_id));

约束是独立为 person_idimage_id 创建索引还是创建统一索引?

我的目标 是通过创建索引更快地独立搜索 person_idimage_id,但我不想创建更多开销如果这是在约束中自动完成的。

这在功能上等同于:

create unique index unq_personimage_person_image on personimage(person_id, image_id);

唯一索引用于实现约束。因为一个两列中的约束,两者都必须在索引中。

A UNIQUE 约束是 almost,但与相同列上相同顺序的 UNIQUE 索引不完全相同。但也有一些细微的差别。

参见:

  • How does PostgreSQL enforce the UNIQUE constraint / what type of index does it use?

实际上,您在 (person_id, image_id) 上获得了一个包含约束的多列唯一索引。由于您 想独立搜索 image_id,请在 (image_id)(image_id, person_id) 上添加另一个索引。详细解释: