Ответ
Full Scan (полное сканирование таблицы) — это операция, при которой СУБД для выполнения запроса последовательно читает все строки таблицы, не используя индексы.
Проблемы:
- Низкая производительность на больших таблицах (O(n) сложность).
- Высокая нагрузка на дисковую подсистему (I/O) и процессор.
Когда СУБД применяет Full Scan?
- Отсутствует подходящий индекс для условий
WHEREилиJOIN. - Запрос должен обработать большую часть данных таблицы (например, >15-20%).
- Выполняются агрегатные операции над всеми данными (
COUNT(*),SUMпо всей таблице). - Явный запрос всех данных (
SELECT * FROM large_table).
Пример (SQL):
-- Скорее всего вызовет Full Scan, если нет индекса на status
SELECT id, customer_id, amount FROM orders WHERE status = 'PENDING';
Как избежать:
- Создавать индексы для часто используемых в условиях поиска и соединения полей.
- *Избегать `SELECT `** — выбирать только необходимые столбцы.
- Проверять планы выполнения запросов (EXPLAIN / EXPLAIN ANALYZE) для выявления сканирований.
- Правильно проектировать таблицы (нормализация, выбор типов данных).