Встречается на собеседованиях • сегодня
Когда БД может использовать SEQUENTIAL SCAN вместо индекса
В PostgreSQL (и других СУБД) sequential scan может быть выбран вместо индекса в нескольких случаях:
-
Большой процент данных: Если запрос затрагивает >5-10% таблицы, оптимизатор может решить, что полное сканирование эффективнее.
-
Отсутствие подходящего индекса: Нет индекса для условий WHERE или JOIN.
-
Неселективные запросы:
WHERE status = 'active'(если 90% строк имеют этот статус). -
Маленькие таблицы: Для таблиц, помещающихся в 1-2 страницы, seq scan дешевле.
-
Принудительное отключение:
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;
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы