Методы оптимизации выполнения запросов в реляционных СУБД


Оптимизаторы с гибкой структурой - часть 6


Во второй альтернативе наиболее вложенный LOLEPOP ACCESS с INDEX1. Функция свойств этого LOLEPOP выработает вектор свойств, содержащий информацию от том, что выбираются только TID'ы кортежей EMP; применяется только предикат на AGE; кортежи выбираются в порядке возрастания значений поля AGE. Теперь можно вычислить функцию свойств LOLEPOP GET по его входным параметрам и их свойствам (для первого параметра). Функция свойств для GET объединяет имена полей, которые предписано выбирать GET, c именами полей, обеспечиваемых входным потоком (определяемым первым аргументом). То же касается предикатов. Следовательно, в векторе свойств GET будет указано, что выбираются значения полей NAME, ADDRESS, TID под управлением предикатов EMP.SAL < 30.000 и EMP.AGE > 45. Эти свойства идентичны свойствам предыдущей альтернативы. Однако свойства порядка кортежей иные.

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

При таком подходе к организации компонентов оптимизатора, ответственных за выбор и оценку альтернативных планов выполнения запросов, гибкость оптимизатора, естественно, существенно увеличивается. Смена набора стратегий и методов оценки не требует переделки программной части оптимизатора, нужно всего лишь изменить набор правил, под воздействием которых он работает. Для справедливости нужно заметить, что построение системы правил - это тоже нетривиальная задача. Это, по сути дела, тоже программирование, только на другом языке.

Можно провести аналогию между оптимизатором, построенным в соответствии с описанным подходом, и синтаксически управляемым компилятором. В среде программистов нет единодушного мнения по поводу достоинств и недостатков таких компиляторов. Одних привлекает этот подход, другие предпочитают традиционные методы разработки компиляторов.Видимо, аналогично будут складываться отношения к построению оптимизаторов, управляемых правилами. Что касается мнения автора, то мне нравится эта идея, позволяющая отделить управляющую часть оптимизатора от специфики выбранных стратегий и оценок. Нам кажется, что при этом подходе увеличивается структурность сложного программного компонента СУБД и облегчаются задачи его модификаций и сопровождения.

Следуя [104], мы изложили только общие идеи построения управляемого прпвилами оптимизатора. Интересные проблемы, не отраженные в [104], связаны с построением языка описания правил и проверкой корректности системы правил при формировании их внутреннего представления. Нам неизвестны публикации, в которых рассматривались бы эти проблемы, хотя, поскольку система Starburst функционирует, в ней они каким-то образом решены.

| |




Начало  Назад  Вперед



Книжный магазин