Ответ
Sequential Scan (последовательное сканирование, seq scan) — это метод доступа к данным в СУБД, при котором система читает все строки таблицы подряд, от первой до последней, для выполнения запроса (например, SELECT * FROM table или SELECT ... WHERE без подходящего индекса).
Как это работает и когда используется:
- Полное сканирование: СУБД загружает страницы данных таблицы одну за другой в буферный кэш и проверяет каждую строку на соответствие условию
WHERE. - Основные случаи использования:
- Запросы, которые должны обработать большую часть (> ~5-10%) строк таблицы.
- Отсутствие подходящего индекса для столбцов в условии
WHERE. - Необходимость прочитать все столбцы строки (индексное сканирование часто требует дополнительного обращения к таблице за остальными данными).
- Принудительное указание
SET enable_indexscan = off;или аналогичных настроек.
Пример и сравнение:
-- Запрос, который, скорее всего, вызовет seq scan, если таблица большая:
SELECT * FROM orders WHERE total_amount > 100;
-- Запрос, который может использовать индекс (если он есть на `customer_id`):
SELECT * FROM orders WHERE customer_id = 12345;
Производительность:
- Плюс: Эффективно для небольших таблиц или когда нужно прочитать большую часть данных.
- Минус: Медленно для больших таблиц при выборке небольшого числа строк, так как требует чтения всего объема данных.
Оптимизация: Чтобы избежать seq scan в нежелательных случаях, создавайте индексы на часто используемых в условиях WHERE и JOIN столбцах.