Re: Postgres8: subselect and optimizer/planner

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Erwin Moller <erwin(at)darwine(dot)nl>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Postgres8: subselect and optimizer/planner
Date: 2007-10-04 14:18:25
Message-ID: 20074.1191507505@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Erwin Moller <erwin(at)darwine(dot)nl> writes:
> SELECT U.userid, U.username,
> (SELECT G.groupname FROM tblgroup WHERE (G.userid=U.userid)) AS ingroup
> FROM tbluser WHERE (bla..bla...);

> Will this approach be slower than a regular join?

Probably; it's unlikely to be faster anyway. The best plan you'll get
from this is equivalent to a nestloop with inner indexscan on
tblgroup.userid. Now that might be the best plan anyway, or it might
not --- if you are selecting many rows from ingroup it's likely to suck.

> Or is my question too general and is the answer 'it depends'?

The only way I could see for this way to win would be if a nestloop is
actually the fastest plan, but the planner misestimates and decides to
use merge or hash join instead. Which could happen :-(

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Alvaro Herrera 2007-10-04 14:23:01 Re: multiple row insertion
Previous Message A. Kretschmer 2007-10-04 14:15:02 Re: multiple row insertion