Что такое план выполнения запроса (query execution plan) в SQL?

«Что такое план выполнения запроса (query execution plan) в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Зачем это нужно? Анализ плана — ключевой метод поиска «узких мест» и оптимизации медленных запросов.

Как получить план в PostgreSQL:

-- Показывает предполагаемый план без выполнения
EXPLAIN SELECT * FROM users WHERE age > 30;

-- Выполняет запрос и показывает фактический план с реальными метриками
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;

На что смотреть в выводе EXPLAIN ANALYZE:

  • Тип сканирования: Seq Scan (полное сканирование) vs Index Scan (сканирование по индексу).
  • Стоимость (cost): Оценочные затраты на начало и завершение операции.
  • Фактическое время выполнения.
  • Количество возвращаемых строк (rows).

Практический пример для тестировщика:

-- Запрос без индекса может использовать Seq Scan
EXPLAIN ANALYZE SELECT * FROM orders WHERE total_amount > 1000;
-- Результат: "Seq Scan on orders ..."

-- После создания индекса
CREATE INDEX idx_orders_amount ON orders(total_amount);
EXPLAIN ANALYZE SELECT * FROM orders WHERE total_amount > 1000;
-- Результат должен измениться на: "Index Scan using idx_orders_amount ..."

Вывод для QA: Планы запросов помогают проверять эффективность индексов, выявлять потенциальные проблемы производительности на этапе тестирования и понимать, как СУБД обрабатывает данные.