EXPLAIN / EXPLAIN ANALYZE
EXPLAIN показывает план выполнения запроса. EXPLAIN ANALYZE выполняет запрос и показывает реальное время.
EXPLAIN [ANALYZE] [BUFFERS] SELECT ...; EXPLAIN (FORMAT JSON) SELECT ...;
Объяснение
Пример
-- Безопасный EXPLAIN ANALYZE для UPDATE BEGIN; EXPLAIN ANALYZE UPDATE orders SET status = 'expired' WHERE created_at < '2023-01-01'; ROLLBACK;
Связанные термины
Анекдоты по теме
Программист пишет пагинацию: SELECT * FROM posts ORDER BY created_at LIMIT 20 OFFSET 10000; — Работает медленно на больших страницах. DBA: OFFSET 10000 значит база читает 10020 строк и выбрасывает 10000. — Как исправить? — Keyset pagination: WHERE created_at < $last_seen ORDER BY created_at DESC LIMIT 20
— Чем SQL декларативный язык? — Ты говоришь ЧТО хочешь получить, не КАК это получить. — Пример? — SELECT name FROM users WHERE age > 18 ORDER BY name; Ты не говоришь: перебери строки, проверь age, отсортируй. Это делает оптимизатор. — А оптимизатор ошибается? — Иногда. Тогда используй hints или перепиши запрос.
pg_stat_statements — расширение PostgreSQL, которое хранит статистику всех запросов: — calls: сколько раз выполнялся — total_exec_time: суммарное время — rows: строк возвращено SELECT query, calls, total_exec_time / calls AS avg_ms FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10; Вот твои самые дорогие запросы.