От чего зависит Index Only Scan vs Index Scan в PostgreSQL?

В PostgreSQL выбор между Index Scan и Index Only Scan зависит от того, может ли планировщик получить все необходимые для запроса данные непосредственно из индекса, без обращения к основной таблице (heap).

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

Что ответить на собеседовании

В PostgreSQL выбор между Index Scan и Index Only Scan зависит от того, может ли планировщик получить все необходимые для запроса данные непосредственно из индекса, без обращения к основной таблице (heap).

Подробный разбор

Ответ с пояснениями

В PostgreSQL выбор между Index Scan и Index Only Scan зависит от того, может ли планировщик получить все необходимые для запроса данные непосредственно из индекса, без обращения к основной таблице (heap).

Index Only Scan используется, если:

  • Все запрашиваемые столбцы присутствуют в индексе (индекс покрывает запрос).
  • Статистика visibility map показывает, что строки в таблице не были изменены и видимы для текущей транзакции, что позволяет избежать чтения из основной таблицы.

Если хотя бы один из этих условий не выполняется, PostgreSQL использует обычный Index Scan, при котором после поиска в индексе происходит обращение к основной таблице для получения данных.

Пример: если у вас есть индекс по столбцам (id, name), и запрос выбирает только эти поля, то может быть использован Index Only Scan. Если же запрос требует другие поля, не покрытые индексом, будет обычный Index Scan.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее