Путь запроса
Краткий обзор этапов, которые должен пройти запрос, чтобы получить результат:
-
Необходимо установить соединение между прикладной программой и сервером PostgreSQL. Прикладная программа передает запрос на сервер и ждет результатов, которые сервер отправляет обратно.
-
На этапе синтаксического анализа запрос, переданный прикладной программой, проверяется на правильность синтаксиса и создается дерево запросов.
-
Система перезаписи берет дерево запросов, созданное на этапе синтаксического анализа, и ищет правила (хранящиеся в системных каталогах), которые можно применить к дереву запросов. Она выполняет преобразования, указанные в телах правил.
Одно из применений системы перезаписи - реализация представлений. При выполнении запроса к представлению (т. е. виртуальной таблице) система перезаписи переписывает запрос пользователя в запрос, который вместо этого обращается к базовым таблицам, указанным в определении представления.
-
Планировщик/оптимизатор берет (переписанное) дерево запросов и создает план запроса, который буд ет входом для исполнителя.
Для этого сначала создаются все возможные пути, ведущие к одному и тому же результату. Например, если есть индекс на отношение, которое нужно просканировать, есть два пути для сканирования. Один из них - простое последовательное сканирование, а другой - использование индекса. Далее оценивается стоимость выполнения каждого пути и выбирается самый дешевый путь. Самый дешевый путь расширяется в полный план, который может использовать исполнитель.
-
Исполнитель рекурсивно проходит по дереву плана и извлекает строки в соответствии с планом. Исполнитель использует систему хранения при сканировании отношений, выполняет сортировку и объединение, оценивает квалификацию и, наконец, возвращает полученные строки.
В следующих разделах будет рассмотрен каждый из перечисленных пунктов более подробно, чтобы лучше понять внутренний контроль и структуры данных PostgreSQL.