6
Выполнение запроса
клиентское
приложение
драйвер
разбор ← системный каталог
переписывание ← правила
планирование ← статистика
выполнение ← данные
запрос
результат
PostgreSQL
Выполнение запроса — довольно сложная задача. Запрос передается
от клиента серверу в виде текста. Текст надо разобрать — выполнить
синтаксический разбор (складываются ли буквы в слова, а слова —
в команды) и семантический разбор (есть ли в базе данных таблицы
и другие объекты, на которые запрос ссылается по имени). Для этого
требуется информация о том, что вообще содержится в базе данных.
Такая мета-информация называется системным каталогом, она
хранится в самой базе данных в специальных таблицах.
Запрос может переписываться (трансформироваться) — например,
вместо имени представления подставляется текст запроса. Можно
придумать и свои трансформации, для чего есть механизм правил.
SQL — декларативный язык: запрос, составленный на нем, говорит
о том, какие данные надо получить, но не говорит, как это сделать.
Поэтому запрос (уже разобранный и представленный в виде дерева),
передается планировщику, который разрабатывает план выполнения.
Например, планировщик решает, надо ли использовать индексы. Чтобы
качественно спланировать работу, планировщику нужна информация
о размере таблиц и о распределении данных в них — статистика.
Далее запрос выполняется в соответствии с планом и результат
возвращается клиенту — целиком и полностью:
Это удобный и простой способ для небольших выборок, он обеспечи-
вается простым режимом протокола.