【问题标题】:Oracle CONSTRAINT vs, CONSTRAINT *Using Index*Oracle CONSTRAINT 与 CONSTRAINT *使用索引*
【发布时间】:2020-08-12 16:12:41
【问题描述】:

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

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
);

【问题讨论】:

    标签: sql oracle create-table unique-constraint


    【解决方案1】:

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

    using index 语句允许您:

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

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

    【讨论】:

    • 很高兴您指定。并非所有类型的约束都会创建索引。
    • @AaronLS 。 . .我认为using index 只允许唯一和主键索引。该问题不适用于任何其他类型的约束。
    • 我不是在谈论using index 子句,我是在谈论为约束自动创建索引。有些人似乎认为索引是为所有类型的约束创建的,这是不正确的。您的陈述是准确的,并且表明只有某些类型的约束会自动创建索引。干杯。
    【解决方案2】:

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

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

    在任何情况下,都会有一个唯一索引,并且行将受到它的约束。

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 2018-10-11
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2012-01-16
      • 2019-01-12
      相关资源
      最近更新 更多