Индексы с INCLUDE в PostgreSQL
Что это такое
Параметр INCLUDE
в индексе позволяет добавить в него дополнительные колонки, которые:
- не участвуют в сортировке и поиске (не часть b-tree ключа);
- но хранятся в листьях индекса, чтобы их можно было прочитать без обращения к таблице.
Такие индексы называют covering indexes (покрывающие).
Зачем нужно
Обычно:
- Поиск идёт по ключевым колонкам индекса.
- Остальные данные (
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