Определяемые пользователями функции
Хранимые процедуры (называемые также определяемыми пользователями функциями) получили широкое распространение в реляционных системах. Хотя в разных продуктах поддержка таких функций производится по-разному, они обеспечивают мощный механизм для сокращения коммуникаций клиентов и серверов и предоставляют средства включения в запросы семантики приложений. Новые вопросы оптимизации возникают в тех случаях, когда вызовы хранимых процедур рассматриваются как полноправные компоненты запросов. Проблема определения стоимостной модели определяемой пользователем функции остается трудной проблемой. Интересные аспекты возникают в контексте алгоритма перебора. Например, рассмотрим случай, когда хранимая процедура действует как определенный пользователем предикат в разделе WHERE запроса. В отличие от других предикатов такие предикаты могут быть дорогостоящими (например, они могут быть предикатами на BLOB, содержащих графический образ), и поэтому для них отсутствует здравая эвристика вычисления предикатов как можно раньше. Проблема оптимизации запросов с определенными пользователями предикатами была поставлена в [12, 29]. Подход, предложенный в [12] заключается в том, что к определенным пользователями предикатам следует относиться как к отношениям с точки зрения динамической оптимизации запросов. В подходах [29, 30] используется то наблюдение, что если отсутствуют соединения, то дорогостоящие предикаты могут быть эффективно упорядочены в соответствии с их рангами, вычисляемыми на основе селективности предикатов и стоимости их вычисления для одного кортежа. К сожалению, попытки расширить использование рангов для запросов с соединениями могут привести к выбору неоптимальных планов. Этот недостаток был устранен в [8] путем представления определенных пользователем предикатов наподобие физических свойств плана, так что основанный на динамическом программировании алгоритм перебора гарантирует оптимальность. Более того, при использовании реалистических предположений о стоимостной модели было показано что эта проблема имеет полиномиальную сложность в зависимости от числа определенных пользователями предикатов.
Решение проблемы оптимизации определяемых пользователями предикатов - это только первый шаг в решении более широкой проблемы представления семантики ADT (Abstract Data Type) в системе запросов и оптимизация запросов при наличии абстрактных типов данных. Эта проблема близко соприкасается с областью семантической оптимизации запросов.
- -