我使用的是Oracle 12c,我将IDENTITY
列设置为GENERATED ALWAYS
。
CREATE TABLE Customers
(
id NUMBER GENERATED ALWAYS AS IDENTITY,
customerName VARCHAR2(30) NULL,
CONSTRAINT "CUSTOMER_ID_PK" PRIMARY KEY ("ID")
);
由于ID自动来自序列,因此它将始终是唯一的。
我是否需要在ID列上使用PK,如果是,它是否会影响性能?
索引是否会在INSERT
上产生相同的结果且效果更好?
答案 0 :(得分:2)
是的,你总是应该在ID列上有一个唯一性约束(极少数例外),如果确实它(并且应该是)唯一的,无论它的填充方法是什么 - 值是否由你的应用程序提供代码或通过IDENTITY
列。
答案 1 :(得分:1)
不,您不一定需要主键,但应该始终为优化程序提供尽可能多的有关数据的信息 - 包括唯一的尽可能限制。
对于代理键(例如您的ID
),将其声明为主键几乎总是合适的,因为它最有可能成为引用约束的候选者。
你可以在ID
上使用普通索引,并且查找的性能可以根据数据量进行比较 - 但在这种情况下使用非唯一索引而不是唯一索引 - 在这种情况下没有充分理由避免需要索引的约束。