Oracle CONSTRAINT 与 CONSTRAINT *使用索引*

Oracle CONSTRAINT vs, CONSTRAINT *Using Index*

如果 table 有约束但没有索引,我可以假设唯一的区别是我将它留给 Oracle 来确定如何确定对 table 的更改是否违反约束,可能导致 Oracle 必须进行 table 扫描才能确定它?

CREATE TABLE SchemaName."Table1" (
  field_one VARCHAR2(10 BYTE) NOT NULL,
  field_two VARCHAR2(30 BYTE) NOT NULL,
  field_three DATE NOT NULL,
  (etc)
  CONSTRAINT client_iu1 UNIQUE (field_one,field_two,field_three)
);

对比

CREATE TABLE SchemaName."Table1" (
  field_one VARCHAR2(10 BYTE) NOT NULL,
  field_two VARCHAR2(30 BYTE) NOT NULL,
  field_three DATE NOT NULL,
  (etc)
   CONSTRAINT client_ak1 UNIQUE (field_one,field_two,field_three) USING INDEX fds_base.client_iu1
);

如果用于约束的列已被索引,Oracle 将使用该索引。

否则,它会自己创建一个。

在任何情况下,都会是一个唯一索引,行会被它约束。

Oracle 在所有情况下都为 unique(和 primary key 约束)创建索引。

using index 语句允许您:

  • 约束语句中指定索引的名称。
  • 将现有索引用于新约束。

事实上,我发现这些在实践中都没有特别有用。如果您没有给出显式索引,Oracle 会为约束创建适当的索引。