Oracle ОГРАНИЧЕНИЕ против, ОГРАНИЧЕНИЕ * Использование индекса * - PullRequest
0 голосов
/ 28 апреля 2020

Если таблица имеет ограничение, но не имеет индекса, могу ли я предположить, что единственное отличие состоит в том, что я оставляю его на 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
);

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Oracle создает индекс во всех случаях для uniqueprimary key ограничений).

Оператор using index позволяет вам:

  • Указать имя индекса в операторе ограничение .
  • Использование существующего индекса для нового ограничения.

На самом деле я не нахожу ни одного из это особенно полезно на практике. Если вы не указали явный индекс, Oracle создаст соответствующий индекс для ограничения.

3 голосов
/ 28 апреля 2020

Если столбцы, используемые для ограничения, уже проиндексированы, Oracle будет использовать этот индекс.

В противном случае он сам создаст его.

В любом случае, будет уникальным индексом, и строки будут ограничены им.

...