什么是使用独特的索引?

时间:2018-06-07 18:25:48

标签: sql indexing unique-constraint

这可能是一个非常愚蠢的问题,但我从未使用过唯一的索引:但我使用了独特的约束。

我阅读了相关问题Unique index vs. unique constraint that uses a unique index,但仍然无法理解为什么存在唯一索引。

对我来说 UNIQUE 听起来更像是一个约束而不是一个索引。不应该总是将其指定为约束吗?或者我在这里遗漏了什么? (最有可能的)。所以简单来说,我的问题是:

  • 使用唯一索引是什么?

也许答案在于历史书,并且与它们按时间顺序发展有关。

2 个答案:

答案 0 :(得分:2)

唯一索引可以做的一件事是PostgreSQL documentation on unique constraints中不能给出唯一约束。

  

仅覆盖某些行的唯一性限制不能写为唯一约束,但可以通过创建唯一的部分索引来强制执行此类限制。

partial unique index docs中,他们举了一个例子。

  

假设我们有一个描述测试结果的表。我们希望确保给定主题和目标组合只有一个“成功”条目,但可能存在任意数量的“不成功”条目。这是一种方法:

     

CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target) WHERE success;

答案 1 :(得分:1)

通常,使用唯一索引实现唯一约束(据我所知,无论数据库如何)。两者之间的差异非常小 - 通常只有在违反约束的情况下才能使用约束的名称。有些数据库允许您为唯一索引选择索引类型,因此这将是另一个细微差别。

为什么这两个存在?我可以推测。 SQL的设计者非常同意实现唯一约束的唯一合理方法是通过唯一索引。鉴于CREATE INDEX已经存在,为什么不简单地允许一个独特的选项呢?毕竟,数据库需要支持创建唯一索引的能力。