Optimize JsonbContainerTypeName by reordering type checks - Mailing list pgsql-hackers

From Chao Li
Subject Optimize JsonbContainerTypeName by reordering type checks
Date
Msg-id 650638be-4766-4fb1-aa95-eb82c5a4d275@gmail.com
Whole thread Raw
List pgsql-hackers
Hi Hacker,

While reading jsonb related code, I found JsonbContainerTypeName() can 
be optimized. The function currently checks for the less common scalar 
container type before checking for objects and arrays.

This patch reorders the checks to prioritize the most common cases. The 
macros JsonContainerIsArray() and JsonContainerIsObject() are simple bit 
checks and are now evaluated first. This avoids the overhead of calling 
the JsonbExtractScalar() function in the vast majority of use cases.

I did the following test:

```

CREATE TABLE test_jsonb_types (
     id SERIAL PRIMARY KEY,
     data JSONB
);


INSERT INTO test_jsonb_types (data) VALUES
('{"name": "Alice", "age": 30}'),
('[1, 2, "three"]'),
('"hello world"'),
('12345'),
('true'),
('null');


evantest=# SELECT id, data, jsonb_typeof(data) AS data_type FROM 
test_jsonb_types;
  id |             data             | data_type
----+------------------------------+-----------
   1 | {"age": 30, "name": "Alice"} | object
   2 | [1, 2, "three"]              | array
   3 | "hello world"                | string
   4 | 12345                        | number
   5 | true                         | boolean
   6 | null                         | null
(6 rows)

```

Best regards,

--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

Attachment

pgsql-hackers by date:

Previous
From: jian he
Date:
Subject: Re: CREATE SCHEMA ... CREATE DOMAIN support
Next
From: shveta malik
Date:
Subject: Re: Logical Replication of sequences