Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 我应该同时指定索引和唯一索引吗?_Postgresql_Indexing_Unique Constraint_Unique Index - Fatal编程技术网

Postgresql 我应该同时指定索引和唯一索引吗?

Postgresql 我应该同时指定索引和唯一索引吗?,postgresql,indexing,unique-constraint,unique-index,Postgresql,Indexing,Unique Constraint,Unique Index,在我的一个PostgreSQL表上,我有一组由两个字段组成的字段,这些字段在表中定义为唯一的,但在选择数据时,这两个字段也将一起使用。鉴于此,我是否只需要定义一个唯一索引,还是应该在唯一索引之外指定一个索引 这个 还是这个 CREATE UNIQUE INDEX mytable_col1_col2_uidx ON mytable (col1, col2); CREATE INDEX mytable_col1_col2_idx ON mytable (col1, col2); 如果你有一个唯一的

在我的一个PostgreSQL表上,我有一组由两个字段组成的字段,这些字段在表中定义为唯一的,但在选择数据时,这两个字段也将一起使用。鉴于此,我是否只需要定义一个唯一索引,还是应该在唯一索引之外指定一个索引

这个

还是这个

CREATE UNIQUE INDEX mytable_col1_col2_uidx ON mytable (col1, col2);
CREATE INDEX mytable_col1_col2_idx ON mytable (col1, col2);

如果你有一个唯一的索引,那么你就不需要这个索引——它是多余的。唯一索引既是唯一约束,也是可以像任何其他索引一样使用的索引

从:

注意:向表添加唯一约束的首选方法是ALTER table。。。添加约束。使用索引强制执行唯一约束可以被视为一个不应直接访问的实现细节。然而,人们应该知道,不需要在唯一列上手动创建索引;这样做只会复制自动创建的索引。


我的

还要注意,每个字段上的唯一索引与两个字段上的唯一索引不一样。如果您需要在每个字段上单独使用一个唯一的索引,那么两列索引将无法做到这一点。OT,但这也解决了我的问题。我使用Hibernate/jpa注释遇到了这个问题。我不确定设置唯一列是否也会添加索引。至少在Postgres中是这样,所以没有必要为列添加单独的索引。我不确定这是真的。注释只是说索引不需要手动创建,也不是说不需要(非唯一的)索引IMHO。查看一些查询执行计划似乎可以确认,只有在为列添加另一个(非唯一)索引时,索引才会用于查找。
CREATE UNIQUE INDEX mytable_col1_col2_uidx ON mytable (col1, col2);
CREATE INDEX mytable_col1_col2_idx ON mytable (col1, col2);