Индексы с INCLUDE в PostgreSQL

Что это такое

Параметр INCLUDE в индексе позволяет добавить в него дополнительные колонки, которые:

  • не участвуют в сортировке и поиске (не часть b-tree ключа);
  • но хранятся в листьях индекса, чтобы их можно было прочитать без обращения к таблице.

Такие индексы называют covering indexes (покрывающие).

Зачем нужно

Обычно:

  1. Поиск идёт по ключевым колонкам индекса.
  2. Остальные данные (SELECT ...) PostgreSQL достаёт из таблицы (heap lookup).

С INCLUDE:

  • если все нужные поля есть в индексе, Postgres выполняет Index Only Scan → результат извлекается прямо из индекса, без похода в таблицу;
  • это сильно экономит время, когда таблица большая.

Пример

CREATE INDEX idx_capacity
  ON scheduling_fast_accounting (kind, type, max_per_group_free_capacity)
  INCLUDE (owner);
 
#database #index