План выполнения запроса: как база данных ищет ответ

Что показывает план выполнения запроса, почему база выбирает разные маршруты и чем предварительная оценка отличается от фактической работы.

Два маршрута через стопки карточек сходятся к одному результату на светлом фоне.

Один вопрос, несколько маршрутов

Представьте большой архив заказов. Сотруднику нужен список покупок одного клиента. Можно последовательно просмотреть весь архив, а можно воспользоваться указателем, который ведёт к нужным записям. Ответ получится одним и тем же, но объём работы будет разным. База данных тоже выбирает способ добраться до результата. Этот выбранный порядок действий называют планом выполнения запроса.

План относится к тому, как система выполнит задачу, а не к смыслу вопроса пользователя. Поэтому два внешне похожих обращения к данным могут пройти разными путями. Разница зависит от устройства таблиц, доступных указателей, количества данных и предполагаемого числа подходящих записей.

Что показывает план

В плане можно увидеть крупные операции: чтение таблицы, обращение к индексу, соединение наборов, сортировку. Каждая операция получает данные от предыдущих и передаёт результат дальше. Удобно читать такой план как маршрут посылки по сортировочным пунктам: важно не только место назначения, но и путь между этапами.

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

Почему оценка отличается от факта

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

Фактические показатели появляются после выполнения и отражают уже проделанную работу. Их полезно сопоставлять с предварительными, но аккуратно: один этап может запускаться несколько раз, а время меняется вместе с нагрузкой. Расхождение оценки и факта — повод исследовать данные и условия, а не доказательство неисправности базы.

Роль объёма и индекса

Индекс похож на указатель в книге: он помогает быстро найти небольшую часть содержимого. Если же нужен почти весь архив, обход указателя может дать лишнюю работу; прямое чтение всего набора иногда разумнее. Поэтому появление индекса само по себе не обязывает базу использовать его при каждом обращении.

Выбор зависит от размера таблицы, доли нужных записей и дополнительных действий, например сортировки. При изменении объёма данных прежний удобный маршрут может перестать быть лучшим. Для первого знакомства с этим механизмом полезно отдельно прочитать, зачем базе данных индекс.

Как читать вывод без поспешных выводов

Начните с вопроса: какую часть данных система собиралась найти и сколько нашла на деле? Затем посмотрите, где ей пришлось читать много лишнего или соединять крупные наборы. Уточните, повторяется ли картина на реальных данных и при сходной нагрузке. Отдельно проверьте, не изменился ли смысл запроса или состав исходных таблиц.

План помогает задавать проверяемые вопросы, но не подсказывает универсальную кнопку ускорения. Когда источник данных сложнее одной таблицы, полезно также понять, чем представление отличается от таблицы. Это снижает риск принять удобное отображение данных за отдельное место их хранения.

Полезно помнить, что план не обязан выглядеть одинаково после обновления данных или системы. Если отчёт недавно работал быстро, а теперь заметно задерживается, сравните объём таблиц и условия отбора. Сохраните наблюдения, прежде чем менять устройство базы. Так обсуждение с инженером начнётся с фактов о рабочем случае, а не с догадки о «плохом» индексе.

По теме

Следующий шаг

Если хотите разбираться в работе баз данных системно, изучите программу курса «SQL инженер». Сопоставьте её с вашим уровнем и задачами: понимание плана полезно после освоения самих таблиц, связей и способов получения данных.

SQL инженер
Курс
Доступ сразу
SQL инженер

SQL инженер — это специалист, который работает с базами данных, разрабатывает запросы, оптимизирует хранение данных и обеспечивает эффективную работу с информацией в компаниях.

С нуля до junior
Теория и практика
Диплом по окончании
500
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
46

Вертикальное и горизонтальное масштабирование данных: в чём разница

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

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.