Есть ли способ оптимизировать приведение значения jsonb как двойной точности в Posgresql путем его индексации? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть таблица 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...