Ответ
Да, в PostgreSQL можно и нужно использовать EXPLAIN ANALYZE
для UPDATE
, INSERT
и DELETE
запросов. Это мощный инструмент для анализа и оптимизации производительности не только SELECT
, но и операций записи.
Важно: В отличие от EXPLAIN
, который только строит план, EXPLAIN ANALYZE
реально выполняет запрос, а затем показывает план вместе с фактическими метриками (время выполнения, количество затронутых строк).
Пример:
EXPLAIN ANALYZE
UPDATE users SET status = 'active' WHERE last_login_at < NOW() - INTERVAL '30 days';
Что покажет вывод:
- План выполнения: Как именно СУБД нашла строки для обновления (например,
Index Scan
илиSeq Scan
). - Фактическое время: Сколько миллисекунд заняла каждая операция.
- Количество строк: Сколько строк было обработано на каждом шаге.
- Работа триггеров: Если на таблице есть триггеры, их время выполнения также будет учтено.
Ключевые моменты:
- Осторожность на production: Поскольку запрос выполняется, его запуск на больших таблицах в рабочей среде может быть долгим и ресурсоемким.
- Использование в транзакции: Безопасный способ проверить запрос на production — обернуть его в транзакцию, которую вы затем откатите:
BEGIN; EXPLAIN ANALYZE UPDATE ...; ROLLBACK;
- Поиск узких мест: Помогает выявить проблемы с отсутствующими индексами, неэффективными условиями
WHERE
или "дорогими" триггерами, которые замедляют запись.