У меня есть индекс, предложенный советником по настройке базы данных SQL Server, и я хочу наследовать его в Oracle, но как? - PullRequest
0 голосов
/ 10 октября 2010

Наше приложение поддерживает SQL Server и Oracle в качестве бэкэнда базы данных.

В ходе исследования советник по настройке базы данных на SQL Server предложил создать индекс для таблицы, что привело к значительному улучшению времени выполнения запроса для этой таблицы.Я хотел бы попытаться создать такой же индекс для Oracle, но проблема в понимании того, как интерпретировать часть оператора создания индекса.

Итак, на SQL Server оператор создания индекса:

CREATE NONCLUSTERED INDEX [_dta_index_K2_4_10] ON [products] 
(
    [ID] ASC
)
INCLUDE ( [ALIAS],
[PROD_TYPE]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 

Мой вопрос: как бы выглядела в Oracle * часть оператора создания индекса?

1 Ответ

0 голосов
/ 10 октября 2010

Все эти параметры относятся к SQL Server и не нужны для создания индекса в базе данных Oracle; Я полагаю, что все они по умолчанию настроены по умолчанию и включены просто потому, что инструмент советника многословен.

Более значимой частью является предложение INCLUDE, которое описано в этом SO ответе . У Oracle нет аналога, поэтому вам придется выбрать один из следующих вариантов:

create index idx_name on products(id);

create index idx_name on products(id, alias, prod_type);

Первый из них, безусловно, является первичным ключом таблицы и поэтому (верно?) Уже проиндексирован и уникален.

Второй индексирует первичный ключ плюс некоторые дополнительные столбцы и может быть полезен в запросе, таком как:

select alias, prod_type -- and no other columns
from products
where id = 123;

Я подозреваю, что это последний индекс, который советник по настройке предлагал, в дополнение к предположительно уже существующему уникальному индексу на (id).

ПРИМЕЧАНИЕ. Конечно, необязательно добавлять индекс в базу данных Oracle по совету консультанта по настройке SQL Server!

...