多列约束是为每一列创建索引还是统一索引?
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_id
和 image_id
创建索引还是创建统一索引?
我的目标 是通过创建索引更快地独立搜索 person_id
和 image_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)
上添加另一个索引。详细解释:
我对关联 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_id
和 image_id
创建索引还是创建统一索引?
我的目标 是通过创建索引更快地独立搜索 person_id
和 image_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)
上添加另一个索引。详细解释: