В Разделе 2 мы рассматривали вопросы, связанные с оптимизацией запросов в реляционных СУБД. Как мы подчеркивали в начале этого раздела, оптимизация запросов состоит в выборе оптимального (или близкого к оптимальному) способа выполнения запроса на основе особенностей физической структуры базы данных и поддерживаемых в ней управляющих структур; заложенных в систему знаний о допустимых стратегиях выполнения элементарных составляющих запроса; наконец, на основе той или иной статистической информации, позволяющей оценить эффективность выбранного плана выполнения запроса.
Для оптимизатора запроса все эти данные являются внешними, т.е. оптимизация ограничена внешними факторами. В предыдущем разделе мы касались проблем повышения достоверности оценок планов выполнения запроса за счет более правильного учета статистической информации. Конечно, если оценки более соответствуют реальности, то вероятность выбора для выполнения запроса неоптимального плана уменьшается. Но тем не менее возможности оптимизатора ограничены первыми двумя факторами.
Поэтому, на наш взгляд, работы, связанные с выработкой более эффективных структур хранения баз данных, новых управляющих структур и новых алгоритмов выполнения реляционных операций, имеют непосредственную связь с оптимизацией запросов. В этом разделе мы рассмотрим некоторые из них. При этом в основном мы будем рассматривать предложения, позволяющие улучшить работу традиционно организованных реляционных систем управления базами данных, не затрагивая специфику систем, функционирующих при поддержке специализированной аппаратуры (машин баз данных).
Следует отметить, что работы, относящиеся к теме данного раздела, достаточно трудно классифицировать. Конечно, все их объединяет общая идея - повышение эффективности реляционных систем, но предлагаемые подходы очень разнообразны. Поэтому материал раздела разбивается на подразделы не в соответствии со спецификой методов, а исходя из их предназначений. Мы остановимся на предложениях, направленных на более эффективное выполнение операций соединения, вычисление агрегатных функций, а также повышение эффективности выполнения выделенных наборов запросов.
Назад | Содержание | Вперед