Re: [HACKERS] subselect and optimizer - Mailing list pgsql-hackers

From Vadim B. Mikheev
Subject Re: [HACKERS] subselect and optimizer
Date
Msg-id 35331027.AC58006A@sable.krasnoyarsk.su
Whole thread Raw
In response to Re: [HACKERS] subselect and optimizer  ("Boersenspielteam" <boersenspiel@vocalweb.de>)
Responses Re: [HACKERS] subselect and optimizer
Re: [HACKERS] subselect and optimizer
List pgsql-hackers
Boersenspielteam wrote:
>
> No, but in the more general case of a simple join over two tables
> with fields with an index declared on them.
>
> say: Select * from Trans, Spieler where
> Spieler.spieler_nr=Trans.spieler_nr
>
> Uses indices in 6.2.1, doesn't use them in 6.3.1 (two seq scans).

Sorry, old mail from you is lost - what was execution plan in 6.2.1 ?

In current I see that

Hash Join  (cost=5905.62 size=3343409 width=8)
  ->  Seq Scan on trans  (cost=3154.70 size=71112 width=4)
  ->  Hash  (cost=0.00 size=0 width=0)
        ->  Seq Scan on kurse  (cost=238.61 size=4958 width=4)

IS FASTEST plan ! Result is returned in ~ 56 sec.

Nested Loop  (cost=148934.30 size=3343409 width=8)
  ->  Seq Scan on trans  (cost=3154.70 size=71112 width=4)
  ->  Index Scan on kurse  (cost=2.05 size=4958 width=4)

returns result in ~ 80 sec.

Merge Join  (cost=7411.81 size=3343409 width=8)
  ->  Index Scan on kurse  (cost=337.90 size=4958 width=4)
  ->  Index Scan on trans  (cost=4563.60 size=71112 width=4)

is SLOWEST plan (~200 sec).

Please don't think that using indices is the best way in all cases...

BTW, you can use -fX _backend_ option to forbid some join methods -
I used '-o -fh' to get MJ plan and '-o -fh -fm' to test NL plan.

Vadim

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Async I/O
Next
From: "Jose' Soares Da Silva"
Date:
Subject: INTERVALs