From: | "Joel Jacobson" <joel(at)compiler(dot)org> |
---|---|
To: | pgsql-hackers(at)lists(dot)postgresql(dot)org, akorotkov(at)postgresql(dot)org |
Subject: | jsonb subscripting assignment performance |
Date: | 2021-04-14 05:39:23 |
Message-ID: | a4356052-9e77-456f-b824-3a5fa7400c3c@www.fastmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
commit 676887a3 added support for jsonb subscripting.
Many thanks for working on this. I really like the improved syntax.
I was also hoping for some performance benefits,
but my testing shows that
jsonb_value['existing_key'] = new_value;
takes just as long time as
jsonb_value := jsonb_set(jsonb_value, ARRAY['existing_key'], new_value);
which is a bit surprising to me. Shouldn't subscripting be a lot faster, since it could modify the existing data structure in-place? What am I missing here?
I came to think of the this new functionality when trying to optimize some
PL/pgSQL code where the bottle-neck turned out to be lots of calls to jsonb_set() for large jsonb objects.
Here is the output from attached bench:
n=10000
00:00:00.002628 jsonb := jsonb_set(jsonb, ARRAY[existing key], value);
00:00:00.002778 jsonb := jsonb_set(jsonb, ARRAY[new key], value);
00:00:00.002332 jsonb[existing key] := value;
00:00:00.002794 jsonb[new key] := value;
n=100000
00:00:00.042843 jsonb := jsonb_set(jsonb, ARRAY[existing key], value);
00:00:00.046515 jsonb := jsonb_set(jsonb, ARRAY[new key], value);
00:00:00.044974 jsonb[existing key] := value;
00:00:00.075429 jsonb[new key] := value;
n=1000000
00:00:00.420808 jsonb := jsonb_set(jsonb, ARRAY[existing key], value);
00:00:00.449622 jsonb := jsonb_set(jsonb, ARRAY[new key], value);
00:00:00.31834 jsonb[existing key] := value;
00:00:00.527904 jsonb[new key] := value;
Many thanks for clarifying.
Best regards,
Joel
Attachment | Content-Type | Size |
---|---|---|
jsonb-bench.sql | application/octet-stream | 930 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2021-04-14 06:39:40 | Re: Replication slot stats misgivings |
Previous Message | Michael Paquier | 2021-04-14 05:33:26 | Re: Simplify backend terminate and wait logic in postgres_fdw test |