Как анализировать план выполнения запросов в PostgreSQL с помощью EXPLAIN и EXPLAIN ANALYZE

Python Junior Без компании
Как анализировать план выполнения запросов в PostgreSQL с помощью EXPLAIN и EXPLAIN ANALYZE
Ответы
EXPLAIN показывает предполагаемый план выполнения запроса без реального выполнения, а EXPLAIN ANALYZE выполняет запрос и предоставляет фактические метрики. Ключевые метрики для анализа: - **Cost** - оценка стоимости операции (чем меньше, тем лучше) - **Rows** - ожидаемое количество строк - **Width** - средний размер строки в байтах - **Actual Time** - реальное время выполнения (только в ANALYZE) - **Buffers** - использование кеша (только в ANALYZE) Пример анализа простого запроса: ``` EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30; ``` Вывод может содержать: - **Seq Scan** - полное сканирование таблицы (может быть медленно для больших таблиц) - **Index Scan** - использование индекса (обычно быстрее) - **Sort** - операции сортировки - **Hash Join/Nested Loop** - типы соединений таблиц Оптимизация часто сводится к: - Добавлению недостающих индексов - Переписыванию запросов для использования существующих индексов - Уменьшению количества обрабатываемых строк на ранних этапах