首页 > 解决方案 > Postgres 中的唯一约束是否创建索引?

问题描述

假设我有一个如下所示的表:

CREATE TABLE products (
   product_no integer UNIQUE NOT NULL,
   name text,
   price numeric
);

然后,如果我将值插入表中,postgres(或任何类似的 DBMS)实际上会检查表的每一行还是自动创建索引?如果没有索引,这会很快变得昂贵 [O(N!)]。

标签: sqlpostgresqlconstraintsruntime

解决方案


是和不是。Postgres 检查是否product_no尚未插入。它通过检查索引而不是单个行来做到这一点。

唯一约束是使用索引实现的,因此检查重复是 O(log n) 而不是 O(n)。


推荐阅读