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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多列约束是为每列还是统一索引创建索引?相关的知识,希望对你有一定的参考价值。

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

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,但如果在约束中自动完成,我不想创建更多的开销。

答案

UNIQUE约束几乎与同一列中相同列的UNIQUE索引相同但不完全相同。但是有几个微妙的差异。

看到:

实际上,您可以使用约束在(person_id, image_id)上获得单个多列唯一索引。由于您还想独立搜索image_id,请在(image_id)(image_id, person_id)上添加另一个索引。详细说明:

另一答案

这在功能上等同于:

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

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

以上是关于多列约束是为每列还是统一索引创建索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何构建高性能MySQL索引

如何构建高性能MySQL索引

HSQLDB 索引和多列约束

SQLServer之创建唯一聚集索引

(2.8)Mysql之SQL基础——索引的分类与使用

Oracle数据库主键约束与唯一索引有啥区别?