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

       

Обработка оператора SQL


Оператор SQL подвергается четырехэтапной обработке. В зависимости от происхождения и содержания оператора эти этапы могут быть отделены произвольными интервалами времени. В System R эти произвольные интервалы времени являются прозрачными для компонентов системы, обрабатывающих оператор SQL. Эти механизмы и обработка операторов SQL, поступающих из программ и с терминалов, более подробно обсуждаются в []. Здесь мы кратко обсудим лишь те шаги обработки, которые имеют отношение к выбору путей доступа.

Четыре этапа обработки оператора - это синтаксический разбор, оптимизация, генерация кода и выполнение. Каждый оператор SQL посылается синтаксическому анализатору, который проверяет правильность синтаксиса. Блок запроса представляется списком SELECT, списком FROM и деревом WHERE, содержащими, соответственно, список элементов, подлежащих выборке; список таблиц, из которых должна производиться выборка; булевскую комбинацию простых предикатов, заданную пользователем. В одном операторе SQL может иметься много блоков запросов, поскольку один из операндов предиката сам может являться запросом.

Если синтаксический анализатор не обнаруживает ошибок, вызывается компонент ОПТИМИЗАТОР. ОПТИМИЗАТОР собирает имена столбцов и таблиц, содержащиеся в запросе, и производит их поиск в каталогах System R, чтобы убедиться в их существовании и выбрать информацию о них.

Часть ОПТИМИЗАТОРА, занимающаяся поиском в каталогах, также получает статистические данные об указанных отношениях и данные о путях доступа к каждому из них. Эти данные используются позже при выборе пути доступа. После получения из каталога информации о типе данных и длине каждого столбца ОПТИМИЗАТОР повторно сканирует список SELECT и дерево WHERE для проверки отсутствия семантических ошибок и совместимости типов в выражениях и операциях сравнения в предикатах.

В заключение ОПТИМИЗАТОР производит выбор пути доступа. Прежде всего, он определяет порядок вычисления блоков запросов, содержащихся в операторе. Затем для каждого блока запроса обрабатываются отношения из списка FROM.

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