2015-05-22 2 views
-1

Вот подробности: -Как создать индекс?

Таблица:

tableA

Колонки:

columnA, columnB 

Запрос:

Select * from tableA where columnA = columnB 

Я хотел бы создать индекс для это, где статья "columnA = columnB" в Orac le, возможно ли это сделать?

+1

Пробовали ли вы 'создать индекс some_index на TableA (Колумна, columnb)'? –

ответ

0

Надеется, что это поможет вам ^^

Создание функций на основе индекса

функция на основе индексов облегчения запросов, которые квалифицируются значением, возвращаемое функцией или выражением. Значение функции или выражения предварительно вычисляется и сохраняется в индексе.

В дополнение к предпосылкам создания обычного индекса, если индекс основан на пользовательских функциях, то эти функции должны быть отмечены DETERMINISTIC. Кроме того, у вас просто есть привилегия объекта EXECUTE для любых пользовательских функций, используемых в функциональном индексе, если эти функции принадлежат другому пользователю.

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

В таблице должны быть проанализированы после того, как индекс создается.

Запрос должен быть гарантированно не должен иметь значений NULL из индексированного выражения, так как значения NULL не сохраняются в индексах.

Примечание: CREATE INDEX хранит метки времени самой последней функции, используемой в индексе функции на основе. Эта метка времени обновляется при проверке индекса. При выполнении восстановления в табличном пространстве по времени в функциональном индексе, если временная метка самой последней функции, используемой в индексе, новее, чем временная метка, хранящаяся в индексе, индекс помечен как недопустимый. Для проверки этого индекса вы должны использовать инструкцию ANALYZE INDEX ... VALIDATE STRUCTURE. Для иллюстрации индекса-функции, рассмотрит следующее утверждение, которое определяет индекс-функцию (area_index), определенный на области функции (гео):

CREATE INDEX area_index ON rivers (area(geo)); 

В следующем операторе SQL, когда область (гео) ссылается в предложении WHERE, оптимизатор рассматривает использование index area_index.

SELECT id, geo, area(geo), desc 
FROM rivers  
WHERE Area(geo) >5000; 

У владельцев таблиц должны быть привилегии EXECUTE для функций, используемых в функциональных индексах.

Поскольку функциональный индекс зависит от любой функции, которую он использует, он может быть аннулирован при изменении функции. Если функция действительна, вы можете использовать оператор ALTER INDEX ... ENABLE, чтобы включить функциональный индекс, который был отключен. Инструкция ALTER INDEX ... DISABLE позволяет отключить использование функционального индекса.Рассмотрим делать это, если вы работаете на теле функции

+0

Я не вижу никакой связи с вопросом. Не упоминается функция «область» или выражение, которое использует эту функцию. –

+0

Извините, но я даю ему то же самое, что и его проблема. Не совсем полный код. – ThanhND25

0

запросов для создания индекса в Oracle:

CREATE INDEX idx ON test(id) 
TABLESPACE idxs_indx; 

Где

  • idx это имя индекса
  • test является название таблицы
  • id - это название колонки
  • idxs_indx этого имя табличного

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

CREATE INDEX idx ON test(id); 

Для просмотра созданных индексов, вы можете использовать следующий запрос:

select * from all_ind_column where table_name = 'test'; 

Для вашего вопроса, то я считаю, что ответ будет что-то вроде этого:

create index idx on test(id) where columnA=columnB; 

Сообщите мне, если это работает.

+0

'create index idx on test (id) где columnA = columnB;' недопустимо для Oracle –

+0

Какое исключение он дает? – Minisha

+0

Похоже, вы не можете создать индекс для определенного столбца, который соответствует определенным условиям. Индекс может быть создан только для всех значений столбца. – Minisha

Смежные вопросы