Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: full table scan, database, index, query performance, SQL optimization

Что такое full table scan и в каких случаях он возникает?

Вопрос проверяет понимание full table scan (полного сканирования таблицы) в базах данных, чтобы оценить умение разработчика анализировать и оптимизировать производительность запросов.

Короткий ответ

Full table scan — это операция, при которой СУБД читает все строки таблицы для выполнения запроса. Он возникает, когда запрос не может использовать индекс, например, при отсутствии подходящего индекса или при выборке большей части данных таблицы. Это может значительно замедлить выполнение запроса, особенно на больших таблицах, поэтому важно понимать причины его возникновения для оптимизации.

Длинный ответ

Full table scan (полное сканирование таблицы) — это метод доступа к данным, при котором система управления базами данных (СУБД) последовательно читает каждую строку в таблице, чтобы найти те, которые соответствуют условиям запроса. Это похоже на чтение всей книги страницу за страницей в поисках определённой фразы, вместо использования предметного указателя.

Когда возникает full table scan?

Полное сканирование обычно происходит в следующих ситуациях:

  • Отсутствие подходящего индекса: Если в запросе используется столбец в условии WHERE, JOIN или ORDER BY, и для этого столбца нет индекса, СУБД вынуждена сканировать всю таблицу.
  • Неселективные запросы: Когда запрос должен обработать большую часть строк таблицы (например, более 10-20%), оптимизатор может решить, что сканирование таблицы эффективнее, чем многократное обращение к индексу и таблице.
  • Использование функций или выражений: Применение функций (например, UPPER(column)) или арифметических операций к индексированным столбцам в условиях часто приводит к игнорированию индекса.
  • Малые таблицы: Для очень маленьких таблиц полное сканирование может быть самым быстрым вариантом, так как накладные расходы на использование индекса могут превысить выгоду.

Практический пример

Рассмотрим таблицу users с миллионом записей. Если выполнить запрос без индекса по столбцу city, произойдёт full table scan.

-- Предположим, индекс на city отсутствует
SELECT * FROM users WHERE city = 'Moscow'; -- Вызовет full table scan

-- Создание индекса может решить проблему
CREATE INDEX idx_users_city ON users(city);
-- Теперь тот же запрос, скорее всего, будет использовать индексный поиск.

Как избежать full table scan?

Для оптимизации производительности важно:

  • Создавать индексы на часто используемых в условиях фильтрации столбцах.
  • Анализировать планы выполнения запросов (EXPLAIN в PostgreSQL/MySQL) для выявления неожиданных сканирований.
  • Переписывать запросы, чтобы они могли использовать существующие индексы (например, избегать оборачивания столбцов в функции).
  • Периодически проводить обслуживание индексов (перестроение, обновление статистики).

Вывод: Full table scan — это ресурсоёмкая операция, которую следует минимизировать в рабочих нагрузках, особенно на больших таблицах. Понимание его причин позволяет разработчику эффективно проектировать схемы баз данных, создавать индексы и писать оптимизированные запросы, что критически важно для поддержания высокой производительности приложения.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#full table scan

#database

#index

#query performance

#SQL optimization

Подпишись на Java Developer в телеграм