Seq Scan (Sequential Scan) - это метод сканирования таблицы в PostgreSQL, при котором система читает все строки таблицы подряд, от первой до последней, без использования индексов.

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

С примером изменения Seq Scan на Index Scan можно ознакомиться в интерактивном видео: