Классика баз данных - статьи

       

Набор правил перезаписи для гарантирования поглощения SELECT


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

Философии перезаписи:

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

Простая операция SELECT, действующая над базовыми таблицами, представляет базисный запрос, включающий простые ограничение, проецирование и соединение. Имеются разнообразные высокопроизводительные алгоритмы выполнения таких запросов, и хорошо понятны методы выбора среди этих алгоритмов. Кроме того, как отмечалось выше, наличие более сложных запросов часто навязывает оптимизатору планов выбор конкретного плана – например, наличие подзапросов заставляет применять особые методы и порядки соединений, а использование представлений (как мы увидим) излишне ограничивает возможный порядок соединений в запросе. Наконец, оптимизаторы планов обычно принимают решения на основе среды только одного блока запроса (т.е. одного QGM-блока). В результате запросы с несколькими операциями обычно не приводятся к оптимальным планам, и везде, где это возможно, их следует преобразовывать к одиночным операциям SELECT.

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

В результате мы концентрируемся в этой статье на тех правилах перезаписи в Starburst, которые гарантируют, что все представления (табличные выражения) и подзапросы с квантором существования сливаются всегда, когда это возможно. В Starburst к единой операции SELECT не могут быть переписаны только запросы, содержащие подзапросы не с кванторами существования или с не булевскими сомножителями, операции над множествами, агрегаты и определяемые пользователями расширения (такие как OUTER JOIN). В системе допускается определение правил перезаписи и для таких запросов, так что, хотя они и не преобразуются к одиночной операции SELECT, к ним часто применяются полезные преобразования.

Содержание  Назад  Вперед