Встречается на собеседованиях • сегодня

Когда БД может использовать SEQUENTIAL SCAN вместо индекса

В PostgreSQL (и других СУБД) sequential scan может быть выбран вместо индекса в нескольких случаях:

  1. Большой процент данных: Если запрос затрагивает >5-10% таблицы, оптимизатор может решить, что полное сканирование эффективнее.

  2. Отсутствие подходящего индекса: Нет индекса для условий WHERE или JOIN.

  1. Неселективные запросы: WHERE status = 'active' (если 90% строк имеют этот статус).

  2. Маленькие таблицы: Для таблиц, помещающихся в 1-2 страницы, seq scan дешевле.

  3. Принудительное отключение: SET enable_indexscan = off;

Пример:

sql
-- Создадим таблицу и индекс
CREATE TABLE users (id serial, name text, is_active bool);
CREATE INDEX idx_active ON users(is_active);
INSERT INTO users (name, is_active) 
  SELECT 'user_'||n, n%10=0 FROM generate_series(1,100000) n;

-- Seq scan, т.к. 90% строк неактивны
EXPLAIN ANALYZE SELECT * FROM users WHERE NOT is_active;
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы