我们什么时候使用唯一索引和唯一键?

时间:2013-06-18 07:08:22

标签: oracle

在对网络进行一些关于唯一密钥唯一索引的研究之后。我知道它们都验证了列,但是唯一索引对性能更好 更好的是,如果我有一个500+行的表,可以特别添加一个唯一的键或唯一索引(我已经使用了其他列的主键)。
- 如果由于性能而使唯一索引更好,那么我们何时使用唯一密钥?因为他们都接受null有价值(顺便说一句,我们可以让他们只接受不是空的有价值吗?比如'add unique key not null'?) - 如果唯一的密钥更好,如果一年后表是2000行,我不确定这些表是否会在将来有很多记录。

编辑:
我试图在重复列上使用唯一键,即使没有验证它也会引发错误。我必须在重复列上创建索引。

3 个答案:

答案 0 :(得分:4)

你的整个问题都是基于“我知道他们都验证了这一列,但是唯一的索引对于性能更好。”这是非常值得怀疑的,因为唯一的约束通常由唯一索引支持,并且唯一索引和非唯一索引之间的性能差异很小。索引始终支持唯一约束。

我们使用唯一约束,因为索引不是约束,它只是一种强制机制。您可以使用非唯一索引支持的唯一约束来允许约束也可以推迟。

答案 1 :(得分:2)

主要是关于语义。唯一键是实际规则。唯一索引是帮助Oracle(快速)实施该规则的索引。在旧版本的Oracle(< 8)中,创建唯一密钥也会使Oracle自动创建索引。后来,这改变了。

一篇很棒的文章,更详细地解释了差异和历史,可以在这里找到:

http://www.jlcomp.demon.co.uk/faq/uk_idx_con.html

答案 2 :(得分:2)

UNIQUE INDEX和UNIQUE KEY强制执行字段值的唯一性。 但是如果你必须使用其他表中的外键引用该字段,那么你需要唯一的KEY。

  

顺便说一下,我们可以让他们只接受那些没有价值的东西吗?

是的,同时使用NOT NULL和UNIQUE CONSTRAINT

当然,如果您希望通过该字段进行搜索,请在该字段上添加INDEX。