uz
DF
Daniil Fedorov
июля 8, 2025
Обновлено июля 8, 2025

EXPLAIN ANALYZE

EXPLAIN ANALYZE — это мощный инструмент в SQL, который позволяет разработчикам и администраторам баз данных анализировать, как именно выполняется запрос. Он показывает пошаговый план выполнения, включая используемые индексы, количество обработанных строк и затраченное время.

Как работает EXPLAIN ANALYZE?

Команда EXPLAIN ANALYZE выполняет запрос и предоставляет детализированный отчёт о его выполнении. В отличие от обычного EXPLAIN, который просто строит прогнозируемый план, EXPLAIN ANALYZE действительно выполняет запрос и измеряет фактические показатели.

Пример запроса:

EXPLAIN ANALYZE SELECT * FROM users WHERE email = "test@example.com";

Пример вывода:

Seq Scan on users (cost=0.00..35.50 rows=1 width=64) (actual time=0.032..0.033 rows=1 loops=1)
Filter: (email = 'test@example.com'::text)
Rows Removed by Filter: 999
Planning Time: 0.082 ms
Execution Time: 0.045 ms

Основные элементы вывода

1. Тип выполнения (Scan type)

  • Seq Scan — полный просмотр всех строк таблицы (замедляет выполнение на больших объёмах данных).
  • Index Scan — поиск по индексу (более эффективно).
  • Index Only Scan — поиск по индексу без обращения к таблице.
  • Bitmap Heap Scan — комбинированный поиск с использованием битовой карты.

2. Оценочная стоимость (cost=…)
Ожидаемая стоимость выполнения операции в виртуальных единицах.
Формат: (начальная_стоимость..финальная_стоимость), где первая цифра — начальная стоимость, а вторая — суммарная стоимость.

3. Фактическое время (actual time=…)
Реальное время выполнения операции (в миллисекундах).

4. Количество обработанных строк (rows=…)
Сколько строк было возвращено на данном этапе запроса.

5. Количество повторений (loops=…)
Сколько раз эта операция выполнялась.

Оптимизация с помощью EXPLAIN ANALYZE

1. Добавление индексов
Если запрос выполняет Seq Scan, это может означать отсутствие индекса. Добавление индекса ускорит поиск:

CREATE INDEX idx_users_email ON users(email);

После этого EXPLAIN ANALYZE должен показать Index Scan вместо Seq Scan.

2. Использование VACUUM ANALYZE
Если статистика базы данных устарела, запросы могут выполняться неэффективно. Команда ANALYZE обновляет статистику:

VACUUM ANALYZE;

3. Переписывание запроса
Иногда можно изменить запрос, чтобы заставить оптимизатор использовать более быстрый план. Например:

  • Использование JOIN вместо подзапросов.
  • Замена IN на EXISTS.

4. Разбиение таблиц (Partitioning)
Если таблица слишком велика, её можно разбить на разделы (PARTITION), чтобы ускорить поиск.

Заключение

Команда EXPLAIN ANALYZE — важнейший инструмент для анализа и оптимизации SQL-запросов. Она помогает выявлять узкие места в производительности, определять, какие индексы нужны, и улучшать структуру базы данных для более эффективной работы.