2010-10-10 3 views
0

Наше приложение поддерживает SQL Server и Oracle как базу данных.У меня есть указатель, предложенный советником по настройке базы данных 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] 

Мой вопрос заключается в том, как будет выглядеть на оракула WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] часть заявления создания индекса?

+0

Если вы отправляете код или XML, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «код» (101 010) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

ответ

0

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

Важнейшей частью является предложение INCLUDE, которое описано in this SO answer. 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!

+0

Спасибо, Тони за ответ. Вы правы, идентификатор уникально индексируется с помощью кластерного индекса. Также есть второй индекс, который также имеет индексированный идентификатор, но этот индекс не кластеризуется. И третий индекс был завален консультантом по настройке базы данных, и похоже, что мне придется сократить по крайней мере существующие индексы. – Andy