Перейти к основному содержимому

Путь запроса

Краткий обзор этапов, которые должен пройти запрос, чтобы получить результат:

  1. Необходимо установить соединение между прикладной программой и сервером PostgreSQL. Прикладная программа передает запрос на сервер и ждет результатов, которые сервер отправляет обратно.

  2. На этапе синтаксического анализа запрос, переданный прикладной программой, проверяется на правильность синтаксиса и создается дерево запросов.

  3. Система перезаписи берет дерево запросов, созданное на этапе синтаксического анализа, и ищет правила (хранящиеся в системных каталогах), которые можно применить к дереву запросов. Она выполняет преобразования, указанные в телах правил.

    Одно из применений системы перезаписи - реализация представлений. При выполнении запроса к представлению (т. е. виртуальной таблице) система перезаписи переписывает запрос пользователя в запрос, который вместо этого обращается к базовым таблицам, указанным в определении представления.

  4. Планировщик/оптимизатор берет (переписанное) дерево запросов и создает план запроса, который будет входом для исполнителя.

    Для этого сначала создаются все возможные пути, ведущие к одному и тому же результату. Например, если есть индекс на отношение, которое нужно просканировать, есть два пути для сканирования. Один из них - простое последовательное сканирование, а другой - использование индекса. Далее оценивается стоимость выполнения каждого пути и выбирается самый дешевый путь. Самый дешевый путь расширяется в полный план, который может использовать исполнитель.

  5. Исполнитель рекурсивно проходит по дереву плана и извлекает строки в соответствии с планом. Исполнитель использует систему хранения при сканировании отношений, выполняет сортировку и объединение, оценивает квалификацию и, наконец, возвращает полученные строки.

В следующих разделах будет рассмотрен каждый из перечисленных пунктов более подробно, чтобы лучше понять внутренний контроль и структуры данных PostgreSQL.