Re: Extract numeric filed in JSONB more effectively

From: Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, jian he <jian(dot)universality(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Extract numeric filed in JSONB more effectively
Date: 2023-08-07 03:04:05
Message-ID: CAKU4AWrMKu2EV0YUA-5zHo4oNYWs7wpJ2RhT9RcLUTdYxDu7VA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi:

> For all the people who are interested in this topic, I will post a
> planner support function soon, you can check that then.
>
>
The updated patch doesn't need users to change their codes and can get
better performance. Thanks for all the feedback which makes things better.

To verify there is no unexpected stuff happening, here is the performance
comparison between master and patched.

create table tb(a jsonb);
insert into tb select '{"a": true, "b": 23.3333}' from generate_series(1,
100000)i;

Master:
select 1 from tb where (a->'b')::numeric = 1;
Time: 31.020 ms

select 1 from tb where not (a->'a')::boolean;
Time: 25.888 ms

select 1 from tb where (a->'b')::int2 = 1;
Time: 30.138 ms

select 1 from tb where (a->'b')::int4 = 1;
Time: 32.384 ms

select 1 from tb where (a->'b')::int8 = 1;\
Time: 29.922 ms

select 1 from tb where (a->'b')::float4 = 1;
Time: 54.139 ms

select 1 from tb where (a->'b')::float8 = 1;
Time: 66.933 ms

Patched:

select 1 from tb where (a->'b')::numeric = 1;
Time: 15.203 ms

select 1 from tb where not (a->'a')::boolean;
Time: 12.894 ms

select 1 from tb where (a->'b')::int2 = 1;
Time: 16.847 ms

select 1 from tb where (a->'b')::int4 = 1;
Time: 17.105 ms

select 1 from tb where (a->'b')::int8 = 1;
Time: 16.720 ms

select 1 from tb where (a->'b')::float4 = 1;
Time: 33.409 ms

select 1 from tb where (a->'b')::float8 = 1;
Time: 34.660 ms

--
Best Regards
Andy Fan

Attachment Content-Type Size
v3-0001-Optimize-extracting-a-given-data-type-from-jsonb.patch application/octet-stream 16.9 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2023-08-07 03:54:02 Re: [PoC] pg_upgrade: allow to upgrade publisher node
Previous Message Yugo NAGATA 2023-08-07 02:26:00 Re: pgbench: allow to exit immediately when any client is aborted