Ответ
Да, в 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или "дорогими" триггерами, которые замедляют запись.