Search Postgresql Archives

Jsonb first level keys statistic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!
I ran into a problem which caused by wrong rows count planner expecting to get when using ?| operator against jsonb field.

To illustrate the issue:

create table tbl_test (a jsonb);

insert into tbl_test(a)
select jsonb_build_object('val1', 1)
from generate_series(1, 100000);

analyse tbl_test;

explain analyze 
select count(*)
from tbl_test
where a ?| '{val1}'::text[];

                                                    QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=1986.25..1986.26 rows=1 width=8) (actual time=55.264..55.264 rows=1 loops=1)
   ->  Seq Scan on tbl_test  (cost=0.00..1986.00 rows=100 width=0) (actual time=0.026..43.886 rows=100000 loops=1)
         Filter: (a ?| '{val1}'::text[])
 Planning time: 0.065 ms
 Execution time: 55.310 ms


rows=100 when real value is 100000. In current simple situation it's not an issue, but in real rather complicated queries it leads to wrong execution plan. 
How can I help planner to get accurate statistic about keys distribution in jsonb field? 

version I'm using: PostgreSQL 9.6.16 on x86_64-pc-linux-gnu 






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux