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


Семантическая оптимизация запросов - часть 2


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

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

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

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


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