唯一与非唯一索引

Posted

技术标签:

【中文标题】唯一与非唯一索引【英文标题】:Unique vs non-unique index 【发布时间】:2013-12-11 09:37:49 【问题描述】:

我的表使用 DML 保存了近 40+ 百万条记录。

想知道这些唯一或非唯一索引中的哪一个是更好的实施选择。提供更好的性能。

环境:Oracle 11g

【问题讨论】:

这取决于您的要求。以及列中的数据类型。 【参考方案1】:

如果可能,请使用唯一索引。否则,使用非唯一索引。

换句话说,如果您可以使用唯一索引,那么您应该这样做。如果出于任何原因可能需要记录重复数据,您也别无选择。

如果保证索引是唯一的,Oracle 可以执行非唯一索引无法实现的某些查询计划优化 - 例如,如果使用唯一索引来探测特定值,Oracle 可以停止处理进一步的索引找到匹配项后立即阻止。

【讨论】:

我有一个表格,在“and”条件下搜索了两列。这两个值的组合不能在表中再次出现,但是我没有给出唯一的约束。对它们使用唯一索引还是非唯一索引更好? @RachitGupta:无论您在候选键中有一列还是多列,答案都没有什么不同。【参考方案2】:

这完全取决于表中数据的类型,如果它具有唯一性的数据

high 然后使用 B-tree 否则使用 Bitmap 索引。

【讨论】:

以上是关于唯一与非唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别

(2.8)Mysql之SQL基础——索引的分类与使用

MongoDB中唯一索引的优势

Oracle索引总结- Oracle唯一索引普通索引及约束的关系

MySQL的并发控制与加锁分析

如何使用Spring Data JPA搜索非唯一索引?