在我的一个PostgreSQL表中,我有一组由两个字段组成的字段,它们在表中被定义为唯一的,但在 Select 数据时,这两个字段也将一起使用.鉴于此,我是只需要定义一个唯一索引,还是应该在唯一索引之外指定一个索引?

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

还是这个?

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

推荐答案

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

documentation人中:

Note:向表中添加唯一约束的首选方法是ALTER table...添加约束.使用索引强制执行唯一约束可以被视为一个不应直接访问的实现细节.然而,人们应该意识到有no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index.

我的.

Postgresql相关问答推荐

从子查询中的排序结果中获取前X行

使用regexp获取表名

如何在PostgreSQL 16中设置&Q;VARSIZE&Q;和&Q;SET_VARSIZE&Q;

为MCV扩展统计设置统计目标

Psql:Windows 10上奇怪的错误输出编码

如何将特定值排序为最后,其余记录按 id DESC 排序?

有没有办法共享数据或监控复杂 PostgresQL 事务的进度?

有对(type_id,element_id),如(1,1),(1,2),..(5,3).如果我需要获取没有 element_id 1 的类型 ID,如何从结果中排除 type_id?

Postgres 会话处于空闲状态,query = COMMIT 或 ROLLBACK

获取 OperationalError: FATAL: sorry, too many clients already using psycopg2

如何让 Flask SQLAlchemy 重用数据库连接?

如何通过我在 PostgreSQL 中的数据库获取列大小和类型

MAC OS X 上的 Postgres 权限被拒绝

PostgreSQL:如何安装 plpythonu 扩展

Psycopg2 使用占位符插入表格

在 PostgreSQL 中显示正在运行的查询的全文

Postgres - 如果找不到记录,则在更新时返回错误

Postgis 中 2 点之间的距离,单位为 4326 米

Django 1.9.2 AssertionError:database connection isn't set to UTC

PostgreSQL 多种认证方式