Seq Scan (Sequential Scan) - это метод сканирования таблицы в PostgreSQL, при котором система читает все строки таблицы подряд, от первой до последней, без использования индексов.
Как работает Seq Scan
-
Полное чтение таблицы: PostgreSQL последовательно читает все блоки данных таблицы с диска (или из памяти, если они кэшированы)
-
Проверка условий: Каждая строка проверяется на соответствие условиям запроса (WHERE-условиям)
-
Возврат подходящих строк: Строки, удовлетворяющие условиям, включаются в результат
Когда PostgreSQL использует Seq Scan
-
Когда нет подходящего индекса.
-
Когда нужно прочитать большую часть таблицы (обычно >5-10% данных).
-
Для небольших таблиц, где Seq Scan эффективнее использования индекса.
-
Когда индексы не могут быть использованы (например, при использовании функций в условиях).
Плюсы Seq Scan
-
Простота реализации
-
Эффективна для полного сканирования таблиц
-
Не требует дополнительных операций с индексами
-
Хорошо работает с последовательным доступом к диску
Минусы Seq Scan
-
Может быть медленной для больших таблиц
-
Читает много лишних данных при выборочных запросах
-
Требует больше ресурсов ввода/вывода
Когда стоит избегать Seq Scan
Если Seq Scan появляется в запросе, где:
- Таблица большая;
- Выбирается небольшой процент строк;
- Есть подходящие индексы;
В таких случаях стоит рассмотреть возможность добавления или использования существующих индексов.
С примером изменения Seq Scan на Index Scan можно ознакомиться в интерактивном видео: