On Wed, Aug 10, 2022 at 4:40 PM Alvaro Herrera <alvhe...@alvh.no-ip.org>
wrote:

> On 2022-Aug-10, Richard Guo wrote:
>
> > The right-anti join plan has the same cost estimation with right join
> > plan in this case. So would you please help to test what the right join
> > plan looks like in your env for the query below?
> >
> >  select * from foo left join bar on foo.a = bar.c;
>
> You're right, it does.
>
> 55432 16devel 475322=# explain (analyze, buffers)  select * from foo left
> join bar on foo.a = bar.c;
>                                                       QUERY PLAN
>
>
> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
>  Hash Right Join  (cost=1.23..90875.24 rows=10 width=20) (actual
> time=456.410..456.415 rows=10 loops=1)
>    Hash Cond: (bar.c = foo.a)
>    Buffers: shared hit=15852 read=6273
>    ->  Seq Scan on bar  (cost=0.00..72124.00 rows=5000000 width=12)
> (actual time=0.036..210.468 rows=5000000 loops=1)
>          Buffers: shared hit=15852 read=6272
>    ->  Hash  (cost=1.10..1.10 rows=10 width=8) (actual time=0.037..0.038
> rows=10 loops=1)
>          Buckets: 1024  Batches: 1  Memory Usage: 9kB
>          Buffers: shared read=1
>          ->  Seq Scan on foo  (cost=0.00..1.10 rows=10 width=8) (actual
> time=0.022..0.026 rows=10 loops=1)
>                Buffers: shared read=1
>  Planning:
>    Buffers: shared hit=92 read=13
>  Planning Time: 1.077 ms
>  Execution Time: 456.458 ms
> (14 filas)


Thanks for help testing. Comparing the anti join plan and the right join
plan, the estimated cost and the execution time mismatch a lot. Seems
the cost estimate of hashjoin path is not that precise for this case
even in the unpatched codes. Maybe this is something we need to improve.

Thanks
Richard

Reply via email to