создать индекс по созданию таблицы в Oracle - PullRequest
0 голосов
/ 18 февраля 2020

В MySql можно создать индекс для (неуникального) столбца вместе с таблицей, например,

create table orders(
   orderid varchar(20) not null unique,
   customerid varchar(20),
   index(customerid)
   );

Не найдя соответствующую опцию в Oracle, т.е. создать Впоследствии, я думаю, это невозможно сделать как индекс для создания таблицы, а не как отдельную команду. Это правильно? Если это так, то в чем причина этого - эффективность, как, например, обсуждается здесь Вставка данных после создания индекса в пустой таблице или создание уникального индекса после вставки данных в oracle? ? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Кроме индексов, определенных как часть основного или уникального ограничения, похоже, нет способа определить индекс как часть оператора CREATE TABLE в Oracle. Хотя предложение USING INDEX является частью элемента constraint-state оператора CREATE TABLE, выдается ошибка missing right parenthesis, если вы пытаетесь включить предложение USING INDEX в любое определение ограничения, кроме ограничения PRIMARY или UNIQUE - см. Эту базу данных <> fiddle для примеров.

Что касается "почему" - это вопрос, на который может ответить только кто-то из команды по архитектуре Oracle. С моей личной точки зрения, ориентированной на пользователя, я не вижу особой ценности в создании индекса как части оператора CREATE TABLE, но потом я привык к тому, как работает Oracle, и мои шаблоны мышления ориентированы на это конкретное направление. YMMV.

1 голос
/ 18 февраля 2020

Причина различия root заключается в том, что MySQL и Oracle - это два совершенно разных продукта, разработанных в разное время разными командами разработчиков программного обеспечения. Тот факт, что MySQL принадлежит Oracle, ничего не значит в этом случае. MySQL был отдельным и отдельно разработанным продуктом, который впоследствии был приобретен Oracle. Что касается того, почему две отдельные и отличные команды дизайнеров приняли решения, которые они приняли ... вы должны спросить их . Но я уверен, что это не имеет ничего общего с операционной эффективностью, как вы предлагаете. После создания таблицы и индекса нет никакой разницы между созданием индекса как части CREATE TABLE и созданием индекса отдельно. И поэтому не будет никакой разницы в эффективности любого DML на указанной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...