Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: PostgreSQL, table scan, sequential scan, index scan, bitmap scan

Какие виды сканирования таблиц существуют в PostgreSQL?

Вопрос проверяет знание методов доступа к данным в PostgreSQL, что важно для оптимизации запросов и понимания работы планировщика.

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

В PostgreSQL есть три основных вида сканирования таблиц: последовательное сканирование (Seq Scan), сканирование по индексу (Index Scan) и битовое сканирование (Bitmap Scan). Seq Scan читает все строки таблицы подряд, что эффективно для больших выборок. Index Scan использует индекс для быстрого поиска конкретных строк. Bitmap Scan комбинирует несколько индексов и затем читает страницы.

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

Основные виды сканирования таблиц в PostgreSQL

PostgreSQL использует различные методы сканирования таблиц для эффективного выполнения запросов. Выбор метода зависит от статистики, наличия индексов и условий запроса. Планировщик запросов автоматически выбирает оптимальный способ доступа к данным.

Последовательное сканирование (Seq Scan)

Это самый простой метод, при котором PostgreSQL читает все строки таблицы последовательно, одну за другой. Он эффективен, когда нужно получить большую часть данных таблицы (обычно более 10-20%) или когда таблица маленькая. Seq Scan также используется, когда нет подходящего индекса.

EXPLAIN SELECT * FROM users WHERE age > 30;
-- Результат: Seq Scan on users

Сканирование по индексу (Index Scan)

При Index Scan PostgreSQL сначала находит нужные записи в индексе, а затем обращается к таблице для получения полных строк. Этот метод эффективен для точечных запросов, возвращающих небольшое количество строк. Каждое обращение к таблице требует чтения отдельной страницы, что может быть затратно при большом количестве совпадений.

CREATE INDEX idx_users_age ON users(age);
EXPLAIN SELECT * FROM users WHERE age = 25;
-- Результат: Index Scan using idx_users_age

Битовое сканирование (Bitmap Scan)

Bitmap Scan состоит из двух этапов: сначала строится битовая карта страниц, содержащих нужные строки (Bitmap Index Scan), затем эти страницы читаются из таблицы (Bitmap Heap Scan). Этот метод эффективен, когда нужно получить умеренное количество строк (например, 5-15% таблицы) или когда комбинируются условия по разным индексам.

EXPLAIN SELECT * FROM users WHERE age BETWEEN 20 AND 30;
-- Результат: Bitmap Heap Scan on users
--   -> Bitmap Index Scan on idx_users_age

Вывод

Понимание видов сканирования помогает писать эффективные запросы и правильно создавать индексы. Seq Scan подходит для больших выборок, Index Scan — для точных совпадений, а Bitmap Scan — для диапазонных запросов и комбинаций условий. Используйте EXPLAIN ANALYZE для анализа реального плана выполнения запроса.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

  • SQL

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

#PostgreSQL

#table scan

#sequential scan

#index scan

#bitmap scan

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.