Что показывает план выполнения запроса, почему база выбирает разные маршруты и чем предварительная оценка отличается от фактической работы.
Один вопрос, несколько маршрутов
Представьте большой архив заказов. Сотруднику нужен список покупок одного клиента. Можно последовательно просмотреть весь архив, а можно воспользоваться указателем, который ведёт к нужным записям. Ответ получится одним и тем же, но объём работы будет разным. База данных тоже выбирает способ добраться до результата. Этот выбранный порядок действий называют планом выполнения запроса.
План относится к тому, как система выполнит задачу, а не к смыслу вопроса пользователя. Поэтому два внешне похожих обращения к данным могут пройти разными путями. Разница зависит от устройства таблиц, доступных указателей, количества данных и предполагаемого числа подходящих записей.
Что показывает план
В плане можно увидеть крупные операции: чтение таблицы, обращение к индексу, соединение наборов, сортировку. Каждая операция получает данные от предыдущих и передаёт результат дальше. Удобно читать такой план как маршрут посылки по сортировочным пунктам: важно не только место назначения, но и путь между этапами.
Документация PostgreSQL показывает, что план содержит оценки количества строк и стоимости операций. Стоимость в таком выводе — условная величина для сравнения вариантов внутри системы, а не денежная сумма и не готовый прогноз времени в секундах. По одному крупному числу нельзя уверенно назвать причину медленной работы.
Почему оценка отличается от факта
До выполнения база не знает точное число строк, которые пройдут через каждый этап. Она опирается на собранные сведения о распределении значений. Если, например, заказы одного клиента встречаются гораздо чаще остальных, средняя оценка может оказаться неточной. Описание статистики PostgreSQL объясняет, зачем планировщику такие сведения и почему оценка для сочетания нескольких условий бывает ошибочной.
Фактические показатели появляются после выполнения и отражают уже проделанную работу. Их полезно сопоставлять с предварительными, но аккуратно: один этап может запускаться несколько раз, а время меняется вместе с нагрузкой. Расхождение оценки и факта — повод исследовать данные и условия, а не доказательство неисправности базы.
Роль объёма и индекса
Индекс похож на указатель в книге: он помогает быстро найти небольшую часть содержимого. Если же нужен почти весь архив, обход указателя может дать лишнюю работу; прямое чтение всего набора иногда разумнее. Поэтому появление индекса само по себе не обязывает базу использовать его при каждом обращении.
Выбор зависит от размера таблицы, доли нужных записей и дополнительных действий, например сортировки. При изменении объёма данных прежний удобный маршрут может перестать быть лучшим. Для первого знакомства с этим механизмом полезно отдельно прочитать, зачем базе данных индекс.
Как читать вывод без поспешных выводов
Начните с вопроса: какую часть данных система собиралась найти и сколько нашла на деле? Затем посмотрите, где ей пришлось читать много лишнего или соединять крупные наборы. Уточните, повторяется ли картина на реальных данных и при сходной нагрузке. Отдельно проверьте, не изменился ли смысл запроса или состав исходных таблиц.
План помогает задавать проверяемые вопросы, но не подсказывает универсальную кнопку ускорения. Когда источник данных сложнее одной таблицы, полезно также понять, чем представление отличается от таблицы. Это снижает риск принять удобное отображение данных за отдельное место их хранения.
Полезно помнить, что план не обязан выглядеть одинаково после обновления данных или системы. Если отчёт недавно работал быстро, а теперь заметно задерживается, сравните объём таблиц и условия отбора. Сохраните наблюдения, прежде чем менять устройство базы. Так обсуждение с инженером начнётся с фактов о рабочем случае, а не с догадки о «плохом» индексе.
По теме
Следующий шаг
Если хотите разбираться в работе баз данных системно, изучите программу курса «SQL инженер». Сопоставьте её с вашим уровнем и задачами: понимание плана полезно после освоения самих таблиц, связей и способов получения данных.


