Postgres запросы к полям JSONB - PullRequest
       24

Postgres запросы к полям JSONB

0 голосов
/ 26 сентября 2018

Я пытаюсь понять стоимость запроса JSONB в Postgres.

Мой сценарий выглядит следующим образом:

CREATE TABLE records (
    id SERIAL PRIMARY KEY,
    jdata jsonb
);

CREATE INDEX age_index ON records(((jdata ->> 'age'::text)::integer) int4_ops);
CREATE INDEX data_index ON records USING gin (jdata);

Таблица в настоящее время содержит около 30 тыс. Записей и будет расти до максимума.около 50K.

Для запроса, подобного следующему

SELECT r.jdata
FROM records r
WHERE (r.jdata ->> 'age')::int = 26;

, требуется около 56 мс, чтобы получить около 8380 строк.

Объяснение возвращает следующее:

Bitmap Heap Scan on records r  (cost=5.45..383.76 rows=150 width=73)
  Recheck Cond: (((jdata ->> 'age'::text))::integer = 26)
  ->  Bitmap Index Scan on age_index  (cost=0.00..5.41 rows=150 width=0)
        Index Cond: (((jdata ->> 'age'::text))::integer = 26)

Можно ли улучшить этот запрос?

...