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


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


В противном случае слишком усложняются последующие фазы. Например, если представление определено с использованием SQL как

DEFINE VIEW V (C1, C2) AS SELECT C3, AVG (C4) FROM R GROUP BY C3, а запрос имеет вид SELECT C2, AVG (C1) FROM V GROUP BY C2,

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

Как мы уже отмечали, такой подход применяется в System R и INGRES в основном для того, чтобы избежать необходимости в явной материализации представления при выполнении запроса. Однако, на самом деле имеется непосредственная связь и с оптимизацией. При слиянии запроса с представлением оптимизатор получает больше информации о данном запросе и потому может принимать более правильные решения. Приведем два простых примера.

Пусть представление определено как

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

Запрос формулируется следующим образом:

SELECT C2 FROM V WHERE C2 < 6.

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

SELECT C1 FROM R WHERE C1 < 6 AND C1 >6.

Уже на фазе логической оптимизации можно было бы установить, что он эквивалентен запросу




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