Optimize JsonbContainerTypeName by reordering type checks

Поиск
Список
Период
Сортировка
От Chao Li
Тема Optimize JsonbContainerTypeName by reordering type checks
Дата
Msg-id 650638be-4766-4fb1-aa95-eb82c5a4d275@gmail.com
обсуждение исходный текст
Список 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/

Вложения

В списке pgsql-hackers по дате отправления: