172 похожих чатов

Привет! У меня есть select с условием по полю в jsonb

и у запроса есть limit и order by.
Как может так получиться, что запрос с limit 2 выполняется на порядок медленнее, чем с limit 50?
У них и планы разные - один использует индекс, другой нет.

4 ответов

39 просмотров
Eugene-Ivlev Автор вопроса

1) Версия Postgres 12.7 2) Запрос: select uuid from credit_application where (data @?? cast('$.approvedProducts[*].guarantorSets[*].guarantors[*].suretyApplicationIntegrationId ? (@ == "100")' as jsonpath)) = true order by integration_id asc limit 50; 3) План запроса с limit 50: Limit (cost=2791.71..2791.83 rows=50 width=60) -> Sort (cost=2791.71..2797.12 rows=2164 width=60) Sort Key: integration_id -> Bitmap Heap Scan on credit_application (cost=543.77..2719.82 rows=2164 width=60) " Recheck Cond: (data @? '$.""approvedProducts""[*].""guarantorSets""[*].""guarantors""[*].""suretyApplicationIntegrationId""?(@ == ""100"")'::jsonpath)" -> Bitmap Index Scan on credit_application_data_idx (cost=0.00..543.23 rows=2164 width=0) " Index Cond: (data @? '$.""approvedProducts""[*].""guarantorSets""[*].""guarantors""[*].""suretyApplicationIntegrationId""?(@ == ""100"")'::jsonpath)" План запроса с limit 2: Limit (cost=0.43..260.42 rows=2 width=60) -> Index Scan using uk_d3e9ebs8y56ub3hcuavg3cgjw on credit_application (cost=0.43..281312.93 rows=2164 width=60) " Filter: (data @? '$.""approvedProducts""[*].""guarantorSets""[*].""guarantors""[*].""suretyApplicationIntegrationId""?(@ == ""100"")'::jsonpath)" 4) Схема таблицы: create table credit_application ( uuid char(32) not null constraint credit_application_pkey primary key, created_date timestamp, last_modified_date timestamp, data jsonb, integration_id varchar(255) not null constraint uk_d3e9ebs8y56ub3hcuavg3cgjw unique, sales_stage varchar(255), status varchar(255), reason_won_lost varchar(255), update_type varchar(255), closed_date timestamp ); alter table credit_application owner to application_storage; create index credit_application_data_idx on credit_application (data);

Eugene Ivlev
1) Версия Postgres 12.7 2) Запрос: select uuid ...

А можете показать explain analyze для обоих запросов?

Eugene Ivlev
1) Версия Postgres 12.7 2) Запрос: select uuid ...

У вас, кстати, не такая схема (индэкс на data явно не тот).

Eugene-Ivlev Автор вопроса
Ilya Anfimov
У вас, кстати, не такая схема (индэкс на data явно...

Так Idea выдает. Вот как он создавался: CREATE INDEX CONCURRENTLY IF NOT EXISTS credit_application_data_idx ON credit_application USING gin (data);

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта