Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пн Фев 18, 2008 10:33  Функциональные индексы |
|
Полезность: Нет оценки
|
Кто знает, можно ли пользуясь АРМом "Администратор словаря" создавать функциональные индексы?
Я такой возможности не нашел. |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Пн Фев 18, 2008 11:23   |
|
Полезность: 3
|
При добавлении новой колонки в создаваемом индексе есть возможность указания выражения PL+ или pl/sql с ее использованием. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пн Фев 18, 2008 11:29   |
|
Полезность: Нет оценки
|
Спасибо, нашел.
Все получилось. |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Пн Фев 18, 2008 12:46  Re: Функциональные индексы |
|
Полезность: Нет оценки
|
timochev пишет: | Кто знает, можно ли пользуясь АРМом "Администратор словаря" создавать функциональные индексы? |
А что такое функциональные индексы? И для чего будете использовать? (Вдруг и нам надо ) _________________ Homo homini |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Пн Фев 18, 2008 13:28  Re: Функциональные индексы |
|
Полезность: 1
|
Цитата: | А что такое функциональные индексы? |
Функциональный индекс строится по возвращаемому значению функции, которая применяется к одному или нескольким полям. Подобные индексы обычно используются запросами, часто вызывающими в секции WHERE одну и ту же функцию.
Последний раз редактировалось: ssa774 (Пн Фев 18, 2008 13:35), всего редактировалось 1 раз |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пн Фев 18, 2008 13:34  Re: Функциональные индексы |
|
Полезность: 1
|
Admin пишет: | И для чего будете использовать? (Вдруг и нам надо ) |
Мы клиента-ФЛ идентифицируем по виду, серии и номеру документа. При поиске ФЛ для предотвращения их размножения производим запрос, но склеивая серию и номер вместе, выкусывая пробелы и переводя латинские символы, имеющие аналог в кириллице, в русские. С ростом базы стало увеличиваться время на поиск. Вот и решил пооптимизить. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Ср Фев 20, 2008 10:38   |
|
Полезность: 1
|
Напоролись на одно неудобство функционального индекса. Функция ХХХ, на которой построен индекс, находилась у нас в библиотеке с другими функциями. Библиотека была сегодня перекомпилирована, но ХХХ не менялась. После перекомпиляции при поиске клиента стала выдаваться ошибка:
Цитата: | ORA-30554 function-based index string.string is disabled |
Смысл ошибки понятен. Для Oracle перекомпиляция пакета эквивалентна изменению функции ХХХ. В таком случае вычисленные для индекса значения функции уже не актуальны. Предлагаемые Ораклом решения:
Цитата: | Cause: An attempt was made to access a function-based index that has been marked disabled because the function on which the index depends has been changed.
Action: Perform one of the following actions:
drop the specified index using the DROP INDEX command
rebuild the specified index using the ALTER INDEX REBUILD command
enable the specified index using the ALTER INDEX ENABLE command
make the specified index usable using the ALTER INDEX UNUSABLE command |
Никакого способа автоматизировать перестроение индекса после каждой перекомпиляции операции в АРМе "Администратор" я не вижу. Поэтому остается помнить о такой неприятной особенности. Для минимизации неудобств вынес эту функцию в отдельную операцию - реже перекомпилировать будем. |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Ср Фев 20, 2008 11:46   |
|
Полезность: Нет оценки
|
А если вынести вызов ф-и в отдельную библиотеку, наподобие пакета F в RUNTIME, где при обращении к F.A реально дергается F_5.A
Полагаю при компиляции исходного пакета индекс не должен слететь. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Ср Фев 20, 2008 11:51   |
|
Полезность: Нет оценки
|
r00st пишет: | А если вынести вызов ф-и в отдельную библиотеку, наподобие пакета F в RUNTIME, где при обращении к F.A реально дергается F_5.A
Полагаю при компиляции исходного пакета индекс не должен слететь. |
Как я понял, предлагается в индексе написать вызов F.A, а реализовать саму логику в F_5.A.
Тогда по логике индекс тоже должен слететь. Ведь перекомпиляция F_5 может изменить логику работу функций, что приведет к несоответствию действующего алгоритма и алгоритма, по которому посчитан индекс.
Если же индекс не слетит, то это уже фича Oracle (ну или бага, если фича не задокументирована ) |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Ср Фев 20, 2008 12:36   |
|
Полезность: Нет оценки
|
timochev пишет: | Для минимизации неудобств вынес эту функцию в отдельную операцию - реже перекомпилировать будем. |
Думаю это оптимальное решение - если Вы действительно измените функцию, то затем перестроите индекс (и в этом будет смысл и гарантии актуальности индекса). _________________ Homo homini |
|
 |
|