Как анализировать план выполнения запросов в 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** - типы соединений таблиц
Оптимизация часто сводится к:
- Добавлению недостающих индексов
- Переписыванию запросов для использования существующих индексов
- Уменьшению количества обрабатываемых строк на ранних этапах