Вопрос проверяет понимание оптимизатора запросов PostgreSQL и причин отказа от использования индексов.
Индекс может не использоваться, когда:
Выборка > ~5-10% таблицы
Индекс не покрывает запрос
Низкая селективность данных
Отсутствует статистика
Малые таблицы (seq scan быстрее)
Основные причины:
Большой % данных
Оптимизатор выбирает seq scan, если нужно >5-10% строк:
SELECT * FROM users WHERE age > 18; -- Если 90% пользователей >18Не покрывающий индекс
Индекс не содержит всех нужных полей:
CREATE INDEX idx_name ON users(name);
SELECT * FROM users WHERE name LIKE 'A%'; -- Доп. чтение таблицыНизкая селективность
Для колонок с малым числом уникальных значений (пол, статус):
SELECT * FROM users WHERE gender = 'F'; -- 50% строкОтсутствие статистики
После массовых изменений:
ANALYZE users; -- Обновить статистикуМалые таблицы
Seq scan быстрее для таблиц <1000 строк.