В каких ситуациях планировщик PostgreSQL (Query Planner) может сознательно проигнорировать существующий индекс и выбрать последовательное сканирование таблицы (Seq Scan), даже если поиск выполняется по индексированному полю?

PostgreSQL может выбрать Sequential Scan вместо использования B-tree индекса по нескольким причинам:

Короткий ответ

Что ответить на собеседовании

PostgreSQL может выбрать Sequential Scan вместо использования B-tree индекса по нескольким причинам:

Подробный разбор

Ответ с пояснениями

PostgreSQL может выбрать Sequential Scan вместо использования B-tree индекса по нескольким причинам:

  • Небольшой объем данных: если таблица маленькая, последовательное сканирование может быть быстрее, чем использование индекса.
  • Высокая селективность запроса: если запрос возвращает большую часть строк, последовательный проход эффективнее.
  • Статистика устарела или отсутствует: планировщик может иметь неверные данные о распределении данных.
  • Типы условий: некоторые операции или функции не могут эффективно использовать индекс.
  • Параметры конфигурации: настройки планировщика могут влиять на выбор плана.

Пример: если таблица содержит 1000 строк, а запрос выбирает 800 из них, PostgreSQL скорее сделает Sequential Scan, так как чтение всей таблицы будет быстрее, чем многократное обращение к индексу и затем к таблице.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее