Thank you for you response.  I was looking for a query rewriting mechanism
which would be outside the optimizer and will do this kind of
transformations at the query level.

~Mahendra


On Fri, Jul 24, 2009 at 7:32 PM, Kevin Grittner <kevin.gritt...@wicourts.gov
> wrote:

> mahendra chavan <mah...@gmail.com> wrote:
> > What I meant by de-correlation was optimizing a query to get rid of
> > sub-queirs by using joins.
> >
> > eg. In the TPC-H schema, a query to find out the names of suppliers
> > who supply parts having size  < 100
> >
> > *Query with nested subqueries:*
> >
> > SELECT
> >     S_NAME
> > FROM
> >     SUPPLIER
> > WHERE
> >     S_SUPPKEY
> >     IN (
> >         SELECT
> >             PS_SUPPKEY
> >         FROM
> >             PARTSUPP
> >         WHERE
> >             PS_PARTKEY
> >                 IN (
> >                     SELECT
> >                         P_PARTKEY
> >                     FROM
> >                         PART
> >                     WHERE
> >                         P_SIZE < 100
> >                 )
> >
> >
> >
> > *Query with joins without subqueries:*
> >
> >
> > SELECT
> >     S_NAME
> > FROM
> >     SUPPLIER
> > INNER JOIN
> >     PARTSUPP
> > ON
> >     S_SUPPKEY = PS_SUPPKEY
> > INNER JOIN
> >     PART
> > ON
> >     P_PARTKEY = PS_PARTKEY
> > WHERE
> >     P_SIZE < 100
> >
>
> Those two queries aren't exactly identical, because you could get
> duplicate rows in the second which would not be there in the first.
> Optimizations to "pull up" subqueries into a higher level FROM clause
> as joins have been in PostgreSQL for as long as I've been using it,
> but the ability to do the specific optimization you show there
> (without the duplicates) was added in version 8.4 using "semi-joins".
> I don't think any syntax was added to explicitly write a query using
> semi-joins, though; it's an optimization of EXISTS, IN, ANY, etc.
>
> To see how the planner chooses to execute a given query against a
> particular schema which has a particular set of statistics about the
> data distributions, use the EXPLAIN option.
>
> http://www.postgresql.org/docs/8.4/interactive/sql-explain.html
>
> -Kevin
>

Reply via email to