CftClub.ru
Клуб специалистов ЦФТ-Банк

Функциональные индексы

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 пишет:
Кто знает, можно ли пользуясь АРМом "Администратор словаря" создавать функциональные индексы?


А что такое функциональные индексы? И для чего будете использовать? (Вдруг и нам надо Smile )
_________________
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 пишет:
И для чего будете использовать? (Вдруг и нам надо Smile )

Мы клиента-ФЛ идентифицируем по виду, серии и номеру документа. При поиске ФЛ для предотвращения их размножения производим запрос, но склеивая серию и номер вместе, выкусывая пробелы и переводя латинские символы, имеющие аналог в кириллице, в русские. С ростом базы стало увеличиваться время на поиск. Вот и решил пооптимизить.
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 (ну или бага, если фича не задокументирована Very Happy )
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Фев 20, 2008 12:36    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Для минимизации неудобств вынес эту функцию в отдельную операцию - реже перекомпилировать будем.


Думаю это оптимальное решение - если Вы действительно измените функцию, то затем перестроите индекс (и в этом будет смысл и гарантии актуальности индекса).
_________________
Homo homini
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru