Я пытаюсь понять стоимость запроса 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)
Можно ли улучшить этот запрос?