06.04.2012

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

Индексы по функции имеют некоторые зависимости
Например, один из наиболее частых запросов к базе имеет следующий вид:
select t1.f1, SOME_FUNC(t1.f1)
from TEMP_TBL t1
where id = :prm
Целесообразно создать индекс по функции SOME_FUNC для таблицы TEMP_TBL:
create index IXF_TBL_SOMEFUNC on TEMP_TBL(SOME_FUNC(f1), f1)
tablespace INDEX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 1M
minextents 1
maxextents unlimited
);
Оптимизатор по синтаксису индексы по функциям не использует

Зависимости:
1) индекс блокируется при любых изменениях в определении функции;
2) функции PL/SQL, которые используются в определении индекса на базе функций, должны быть детерминированы (ключевое слово DETERMINISTIC в определении);
3) при выполнении INSERT, UPDATE происходит обращение к функции индекса;
4) владелец индекса должен иметь для определяющей функции привилегию EXECUTE. Если привилегия EXECUTE отменяется, индекс на базе функций помечается как DISABLED;
5) при удалении функции индекс на базе функций помечается как DISABLED.

Комментариев нет :