Доброго времени суток!
Есть таблица t, в которой много записей, несколько миллионов.
В ней есть поле d типа json (jsonb пока, увы, низя использовать).
В очень малом количестве записей в поле d лежит неNULL'овое значение,
еще в меньшем количестве записей в поле d есть ключ f.
create table if not exists t(id bigserial, d json);
INSERT INTO t(d) SELECT NULL FROM generate_series(1,1000000) i;
update t set d = '{"f":"val"}' WHERE id = 999999;
Собственно, задача быстро найти те записи, в которых есть этот ключ f.
Пробовал созданием индекса
CREATE INDEX json_simple_idx ON t((d->>'f'));
запрос
explain select * from t where (d->>'f') = 'val'
показывает Bitmap Index Scan
но мне куда более подходит запрос
select * from t where (d->>'f') is not null;
а у него seq scan и работает куда как медленнее.
Прошу подсказать - можно ли как-то в рамках моей задачи использовать json-индекс или другим путем идти нужно (если так, то каким?)