🛠️ ANALYZE выполнили. Запрос стал медленнее. Почему?
Сценарий:
SQL не менялся.
Запрос работал нормально.
После ANALYZE время выполнения выросло.
Первая мысль:
«Статистика сломалась».
Но ANALYZE работает иначе.
Он обновляет статистику, которую PostgreSQL использует для оценки стоимости разных планов.
Новая статистика может привести к выбору другого плана.
И этот план не всегда окажется быстрее.
Проблема часто не в самой статистике, а в том, насколько хорошо планировщик оценил количество строк.
Проверка начинается с:
EXPLAIN ANALYZE BUFFERS
Сравните:
— старый план; — новый план; — actual time; — rows estimate; — actual rows; — прочитанные блоки.
Особое внимание:
оценка:
100 строк
факт:
500 000 строк
Такое расхождение может изменить выбор стратегии выполнения.
Типичная ошибка:
увидеть новый план и сразу добавлять индекс.
Но сначала нужно понять:
— почему изменился путь выполнения; — что изменилось в статистике; — насколько оценки совпали с реальностью.
Последовательность:
план до изменений → новый план → EXPLAIN ANALYZE BUFFERS → сравнение estimate/actual → только потом изменение настроек.
Вывод:
ANALYZE обновляет данные для планировщика, но не обещает, что каждый новый план будет быстрее.
Сначала нужно понять логику выбора PostgreSQL.
Сохраните сценарий анализа изменения плана PostgreSQL.