PostgreSQL JSONB GIN: ускорить поиск по ключам и значениям

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

GIN-индекс помогает ускорить поиск по JSONB containment и некоторым операторам. Для условий вида data @> jsonb постройте индекс и сравните план на типичной выборке. ??????? ????????? ?????? ?? ????????? ??????? ? ??????? ???? ?????????? ?? ????? ??????.

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

SQL
CREATE TEMP TABLE events(data jsonb);
CREATE INDEX events_data_gin ON events USING gin(data);
INSERT INTO events VALUES ('{\"kind\":\"payment\",\"state\":\"done\"}');
SELECT data FROM events WHERE data @> '{\"kind\":\"payment\"}'::jsonb;

По умолчанию GIN использует jsonb_ops с широким набором операторов. jsonb_path_ops компактнее для containment @>, но не покрывает все операции и поиска по отдельным ключам.

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

Когда выбрать jsonb_path_ops?

Когда основная нагрузка — containment выражения @> и важен меньший индекс. Для операторов ключей вроде ? используйте стандартный jsonb_ops.