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


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


SELECT C1 FROM R WHERE FALSE, из чего следовало бы, что результат запроса пуст.

Немного более сложный пример. Представление определяется как

DEFINE VIEW V (C3) AS SELECT C2 FROM R WHERE C1 = 6.

Задается запрос

SELECT C3 FROM V WHERE C3 < 16.

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

После слияния запроса с представлением мы получим внутреннюю форму, эквивалентную запросу

SELECT C2 FROM R WHERE C2 < 16 AND C1 = 6.

Для такого запроса имеется способ выполнения, не менее эффективный того, какой был бы выработан для материализованного представления V. Следовательно, явная материализация представления породила бы только дополнительные накладные расходы.

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

Другим примером аналогичных преобразований запросов, опять же производимых не в целях оптимизации, но имеющих к ней непосредственное отношение, являются преобразования, производимые над запросами на модификацию базы данных для удовлетворения существующих в базе данных ограничений целостности. Этот подход впервые был применен, видимо, в СУБД INGRES [9], но используется и в других системах, например, в System R [1] для учета некоторых ограничений целостности.

Напомним, что в терминах языков SQL и QUEL ограничением целостности называется сохраняемое в каталогах базы данных логическое выражение, составленное из допустимых в языке предикатов над объектами базы данных.


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