Когда запрос в базе работает медленно — не надо гадать на кофейной гуще. В PostgreSQL есть два супер-инструмента, которые позволяют увидеть, что именно делает оптимизатор и где запрос тратит время
Речь про EXPLAIN и EXPLAIN ANALYZE
🥰 EXPLAIN — прогноз плана
EXPLAIN показывает, как PostgreSQL собирается выполнить запрос:
— какие индексы может использовать
— какой тип сканирования выберет (Seq Scan, Index Scan, Bitmap Index Scan)
— предполагаемое количество строк
— стоимость выполнения (cost)
😁 Полезно, когда ты хочешь понять теоретический план без реального запуска запроса
Пример запроса
EXPLAIN SELECT * FROM users WHERE email = 'test@mail.com';
⸻
⚡️ EXPLAIN ANALYZE — фактические замеры
EXPLAIN ANALYZE выполняет запрос реально и показывает:
— сколько времени занял каждый шаг
— реальное количество строк
— время старта операции
— расхождение между прогнозами и фактами
Если EXPLAIN — теория, то EXPLAIN ANALYZE — практика
Пример запроса
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@mail.com';
📝 Тут внимательнее: запрос действительно выполнится, поэтому с UPDATE/DELETE используй на тестовых данных
⸻
😴 Что смотреть в плане?
1) Seq Scan — сигнал: возможно нет индекса
2) Row Estimate vs Actual Rows — если сильно расходится, оптимизатор ошибся → можно помочь статистикой
3) Filter / Recheck — где происходит фильтрация
4) Timing — какой узел съедает больше всего времени
5) Planning Time / Execution Time — понять, где узкое место
🚀 Пост Guru Node.js: @DemetraIT