PostgreSQL partial index: индексировать только нужные строки

Категория: Postgresql · Язык: SQL · Обновлено:

Частичный индекс PostgreSQL содержит только строки, удовлетворяющие WHERE. Он уменьшает размер индекса, если запросы часто выбирают небольшую активную часть большой таблицы. ??????? ????????? ?????? ?? ????????? ??????? ? ??????? ???? ?????????? ?? ????? ??????.

Рабочий пример

SQL
CREATE TEMP TABLE jobs(id int, status text, payload text);
CREATE INDEX jobs_queued_idx ON jobs(id) WHERE status = 'queued';
INSERT INTO jobs VALUES (1, 'queued', 'a'), (2, 'done', 'b');
SELECT id FROM jobs WHERE status = 'queued' ORDER BY id;

Планировщик применит индекс, если условие запроса логически подразумевает предикат индекса. Сверьте план через EXPLAIN и реальные распределения данных.

Частый вопрос

Почему индекс не используется?

Проверьте план и убедитесь, что WHERE запроса включает условие индекса в распознаваемой форме. Также индекс может быть невыгоден для маленькой таблицы.