oracle 无索引的唯一约束

qnyhuwrf  于 2023-03-29  发布在  Oracle
关注(0)|答案(3)|浏览(257)

我有一张大table。
这个表不需要查询,我只想把里面的数据保存一段时间。
我想防止表中出现重复行,所以我想添加一个唯一的
表上的约束(或PK)。
但是自动创建的唯一索引是不必要的。
我不需要它,它只是浪费磁盘空间,需要维护(不管创建它的时间有多长)。
有没有一种方法可以创建一个没有索引的唯一约束(任何索引-唯一或非唯一)?
谢谢大家。

p4rjhz4m

p4rjhz4m1#

不可以,在Oracle中,如果没有相应的索引,就不能有UNIQUE约束。添加约束时会自动创建索引,任何删除索引的尝试都会导致错误

ORA-02429: cannot drop index used for enforcement of unique/primary key

编辑

但是你说“假设我有一个大table”。那么我们在这里讨论的是多少行?看,1 TB固态硬盘的价格低于100美元。四核笔记本电脑的价格低于400美元。如果你试图通过编写一堆适用性最小的代码来最大限度地减少存储使用或CPU消耗,以“保存金钱”或“节省时间”,我的建议是你在浪费*时间金钱
我再说一遍--一个TB的存储成本相当于一个小时的程序员时间。一台全新的计算机的成本相当于四个小时的程序员时间。你最好尽你所能最小化编码时间,而不是CPU时间或磁盘空间的传统优化目标。因此,我认为UNIQUE索引是低成本的解决方案。

mlmc2os5

mlmc2os52#

但是,自动创建的唯一索引是不必要的。
事实上,Oracle数据库中的唯一性是通过一个索引来强制/保证的。这就是为什么你的主键约束带有一个唯一索引的原因。
根据文件

  • UNIQUE键约束和索引Oracle对索引实施唯一完整性约束。*

xqkwcwgp

xqkwcwgp3#

也许索引组织表是你需要的。
但严格来说,索引组织的表是存储在索引结构中的表-可以说只有索引而没有表,而你的要求是有没有索引的表,所以这是相反的:)

CREATE TABLE some_name
(
 col1           NUMBER(10)    NOT NULL,
 col2           NUMBER(10)    NOT NULL,
 col3           VARCHAR2(50)  NOT NULL,
 col4           VARCHAR2(50)  NOT NULL,
 CONSTRAINT pk_locations PRIMARY KEY (col1, col2)
)
ORGANIZATION INDEX

相关问题