Sobes.tech
Назад к вопросам
Senior
4

Почему оптимизатор запросов Postgres может использовать Seq Scan на проде, но Index Scan на dev/ft при одинаковых индексах?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Postgres выбирает план выполнения запроса на основе статистики и стоимости, рассчитанной оптимизатором. Даже при одинаковых индексах на продакшене и dev/ft окружениях может использоваться разный план (Seq Scan или Index Scan) из-за различий в:

  • Объёме данных: на проде обычно больше данных, и Seq Scan может быть выгоднее, если большая часть таблицы читается.
  • Актуальности статистики: если статистика устарела или неактуальна, оптимизатор может неверно оценить стоимость.
  • Параметрах конфигурации: настройки, влияющие на стоимость операций (random_page_cost, seq_page_cost).
  • Нагрузке и состоянии кэша: на dev/ft может быть больше свободной памяти и кэшированных страниц, что влияет на выбор.

Seq Scan (последовательное сканирование) эффективен, когда нужно прочитать большую часть таблицы, а индексный скан — когда выборка мала и индекс помогает быстро найти нужные строки.

Для устранения различий стоит:

  • Обновить статистику (ANALYZE).
  • Проверить параметры конфигурации.
  • Сравнить объём и распределение данных.
  • Использовать EXPLAIN ANALYZE для анализа планов.