pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Michael Fuhr <mike@fuhr.org>
To: Chaz. <eprparadocs@gmail.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Question about Sql SELECT and optimizer
Date: Thu, 2 Mar 2006 10:04:14 -0700
Message-ID: <20060302170414.GA7634@winnie.fuhr.org> (raw)
In-Reply-To: <44071B14.4060906@gmail.com>
References: <44071B14.4060906@gmail.com>

On Thu, Mar 02, 2006 at 11:19:32AM -0500, Chaz. wrote:
> I am trying to understand something I have seen happen. I had a select
> that looked like:
> 
> select f(A) from A, B, C where g(A)
> 
> Where f(A) is the select that only depends on table A;
> g(A) is the where part that only depends on table A.
> 
> What I saw happen was the optimizer will waste a lot of time (seconds!)
> bringing in table B and C. I was wondering why doesn't the optimizer
> drop references to tables B and C since they aren't used any where?

The above query does a cross join.  Even though you're not using
values from B and C they're still contributing rows to the result
set.

test=> SELECT * FROM a;
 aid 
-----
 a1
 a2
(2 rows)

test=> SELECT * FROM b;
 bid 
-----
 b1
 b2
(2 rows)

test=> SELECT * FROM c;
 cid 
-----
 c1
 c2
(2 rows)

test=> SELECT a.*, b.*, c.* FROM a, b, c WHERE a.aid = 'a1';
 aid | bid | cid 
-----+-----+-----
 a1  | b1  | c1
 a1  | b2  | c1
 a1  | b1  | c2
 a1  | b2  | c2
(4 rows)

test=> SELECT a.*, b.* FROM a, b, c WHERE a.aid = 'a1';
 aid | bid 
-----+-----
 a1  | b1
 a1  | b2
 a1  | b1
 a1  | b2
(4 rows)

test=> SELECT a.* FROM a, b, c WHERE a.aid = 'a1';
 aid 
-----
 a1
 a1
 a1
 a1
(4 rows)

-- 
Michael Fuhr



view thread (2+ messages)

Message-ID: <20060302170414.GA7634@winnie.fuhr.org>
Permalink:  ../20060302170414.GA7634@winnie.fuhr.org/
Also on:    postgresql.org/message-id/20060302170414.GA7634@winnie.fuhr.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: mike@fuhr.org, eprparadocs@gmail.com
  Subject: Re: Question about Sql SELECT and optimizer
  In-Reply-To: <20060302170414.GA7634@winnie.fuhr.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox