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


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


Как отмечалось в предыдущем подразделе, традиционные оптимизаторы запросов реляционных СУБД имеют достаточно жесткую организацию. Генерация множества альтернативных планов выполнения запроса производится на основе фиксированного набора стратегий, оценки планов также выполняются по фиксированным правилам (если не считать предложений, упомянутых в конце предыдущего подраздела, которые, как мы отмечали выше, примыкают к теме этого подраздела). Эта жесткость организации оптимизатора с одной стороны оправдана, поскольку направлена на сокращение пространства поиска в оптимизаторе и потому делает его работоспособным, но, с другой стороны, вызывает ряд неудобств.

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

В то же время, на самом деле единственным по-существу жестким компонентом СУБД является компонент, связанный с физической организацией баз данных на внешней памяти и осуществляющий доступ к данным нижнего уровня (например, RSS в System R).


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