Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: explain, analyze, optimization

Что такое оператор EXPLAIN ANALYZE и для чего он используется?

Этот вопрос проверяет знание инструментов анализа производительности запросов в базах данных.

Короткий ответ

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

Длинный ответ

EXPLAIN ANALYZE предоставляет детальную информацию о том, как СУБД выполняет запрос.

1. Разница между EXPLAIN и EXPLAIN ANALYZE

  • EXPLAIN: Показывает предполагаемый план выполнения без реального выполнения запроса

  • EXPLAIN ANALYZE: Выполняет запрос и показывает фактическую статистику

2. Ключевые метрики в выводе

EXPLAIN ANALYZE 
SELECT u.name, o.total 
FROM users u 
JOIN orders o ON u.id = o.user_id 
WHERE u.email LIKE '%@gmail.com';

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

Nested Loop  (cost=0.00..1250.50 rows=1000 width=64) (actual time=0.015..15.235 rows=850 loops=1)
  ->  Seq Scan on users u  (cost=0.00..750.25 rows=1000 width=36) (actual time=0.010..5.123 rows=850 loops=1)
        Filter: (email ~~ '%@gmail.com'::text)
        Rows Removed by Filter: 150
  ->  Index Scan using idx_orders_user_id on orders o  (cost=0.00..0.50 rows=1 width=28) (actual time=0.005..0.008 rows=1 loops=850)
        Index Cond: (user_id = u.id)
Planning Time: 0.150 ms
Execution Time: 15.450 ms

3. Анализ ключевых показателей

  • cost: Предполагаемая стоимость операции (стартовая..финальная)

  • actual time: Фактическое время выполнения (старт..финиш)

  • rows: Количество обработанных строк

  • loops: Количество повторений операции

  • Rows Removed by Filter: Строки, отфильтрованные на этапе WHERE

4. Практическое использование для оптимизации

-- Поиск проблемных мест
EXPLAIN ANALYZE 
SELECT * FROM large_table 
WHERE created_at > '2023-01-01' 
AND status = 'active' 
ORDER BY id DESC 
LIMIT 100;

-- Анализ использования индексов
EXPLAIN ANALYZE 
SELECT COUNT(*) FROM users 
WHERE last_login > NOW() - INTERVAL '30 days';

Вывод: Используйте EXPLAIN ANALYZE для анализа и оптимизации медленных запросов. Обращайте внимание на операции с высоким cost, последовательные сканирования больших таблиц и фильтры, которые удаляют много строк. Это поможет определить, где нужны индексы или переформулировка запроса.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

Ключевые слова

#explain

#analyze

#optimization

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.