У меня есть таблица Postgresql с> 1M записей, и есть столбец jsonb.Мое приложение выполняет много операций выбора, например:
select from table_name where (cast(json ->> 'value' as double precision) >= 1;
Этот запрос занимает почти 1500 мсек.Я не могу изменить сам запрос, поэтому мне нужно создать индекс для этой операции.
Я пытался построить индекс btree:
create index concurrently ix_json_value_as_number on table_name using btree(cast(json ->> 'value' as double precision));
, но это не дало мне улучшения времени запроса.Любые идеи?
PS Я использую Postgres 9.4.
PSS Запрос объяснить:
Aggregate (cost=176328.20..176328.20 rows=1 width=0) (actual time=1358.130..1358.130 rows=1 loops=1)
-> Bitmap Heap Scan on table_name (cost=3055.46..175455.10 rows=349240 width=0) (actual time=168.344..1285.381 rows=966650 loops=1)
Recheck Cond: (((bar->> 'foo'::text))::double precision >= 2.39999999999999991::double precision)
Rows Removed by Index Recheck: 36082
Heap Blocks: exact=58417 lossy=105558
-> Bitmap Index Scan on ix_json_value_as_number (cost=0.00..2968.15 rows=349240 width=0) (actual time=152.711..152.711 rows=966711 loops=1)
Index Cond: (((bar ->> 'foo'::text))::double precision >= 2.39999999999999991::double precision)
Planning time: 0.095 ms
Execution time: 1358.813 ms