Я не уверен, что понимаю вопрос.
В Oracle, когда вы объявляете ограничение первичного ключа, Oracle неявно создаст индекс для применения этого ограничения, если не существует подходящего индекса для применения ограничения. Это не «или / или» ситуация, когда вы создаете одно или другое - вы всегда будете иметь как ограничение первичного ключа, так и индекс для применения этого ограничения.
У вас есть выбор, создавать ли индекс отдельно перед созданием ограничения и указывать Oracle использовать индекс для принудительного применения ограничения, или разрешить Oracle неявно создавать индекс. Как правило, не имеет значения, какой подход вы выберете, но есть вещи, о которых нужно знать.
- Если вы сначала создаете индекс, у вас есть возможность делать такие вещи, как указание табличного пространства, в котором будет находиться индекс. Это не принесет выигрыша в производительности, но некоторые администраторы баз данных предпочитают организовывать табличные пространства для разделения таблиц и индексов.
- Если сначала создать индекс, удаление ограничения в будущем не приведет к удалению индекса. Это может быть хорошо или плохо, это зависит от того, что ожидает человек, который отбрасывает ограничение. Однако полезно быть последовательным, чтобы в будущем, если кому-то понадобится сбросить ограничения, все ограничения будут вести себя одинаково.
- Если сначала создать индекс, можно использовать индексы, включающие другие столбцы, для принудительного применения первичного ключа. Например, если вы знаете, что хотите иметь составной индекс для своего первичного ключа и некоторого другого столбца, вы можете использовать этот индекс для принудительного применения первичного ключа вместо создания потенциально избыточных индексов, т.е.
- Если Oracle неявно создает индекс, имя индекса будет соответствовать имени ограничения. Если вы сначала создадите индекс вручную, имена могут отличаться. Технически это не имеет значения, совпадают ли имена, но у вас могут быть сценарии, которые полагаются на совпадение имен, чтобы связать ограничения с индексами.
Пример, который создает неуникальный составной индекс с именем, отличным от ограничения первичного ключа, который затем используется для применения ограничения первичного ключа.
SQL> create table foo( col1 number, col2 number );
Table created.
Elapsed: 00:00:00.01
SQL> create index idx_foo on foo( col1, col2 );
Index created.
Elapsed: 00:00:00.00
SQL> alter table foo
2 add constraint pk_foo
3 primary key( col1 )
4 using index idx_foo;
Table altered.
Elapsed: 00:00:00.13