Что такое Full Scan (полное сканирование) в базах данных?

«Что такое Full Scan (полное сканирование) в базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Full Scan (полное сканирование таблицы) — это операция, при которой СУБД для выполнения запроса последовательно читает все строки таблицы, не используя индексы.

Проблемы:

  • Низкая производительность на больших таблицах (O(n) сложность).
  • Высокая нагрузка на дисковую подсистему (I/O) и процессор.

Когда СУБД применяет Full Scan?

  1. Отсутствует подходящий индекс для условий WHERE или JOIN.
  2. Запрос должен обработать большую часть данных таблицы (например, >15-20%).
  3. Выполняются агрегатные операции над всеми данными (COUNT(*), SUM по всей таблице).
  4. Явный запрос всех данных (SELECT * FROM large_table).

Пример (SQL):

-- Скорее всего вызовет Full Scan, если нет индекса на status
SELECT id, customer_id, amount FROM orders WHERE status = 'PENDING';

Как избежать:

  • Создавать индексы для часто используемых в условиях поиска и соединения полей.
  • *Избегать `SELECT `** — выбирать только необходимые столбцы.
  • Проверять планы выполнения запросов (EXPLAIN / EXPLAIN ANALYZE) для выявления сканирований.
  • Правильно проектировать таблицы (нормализация, выбор типов данных).