Re: [SQL] index usage ... strange !? - Mailing list pgsql-sql

From Tom Lane
Subject Re: [SQL] index usage ... strange !?
Date
Msg-id 10412.948305246@sss.pgh.pa.us
Whole thread Raw
In response to Re: [SQL] index usage ... strange !?  (Marten Feldtmann <marten@feki.toppoint.de>)
List pgsql-sql
Marten Feldtmann <marten@feki.toppoint.de> writes:
>  Ok, indeed it was the wrong statement, therefore I rewrote it to:

>  SELECT P3AT.AO,P3AT.AT,P3AT.AV FROM P3AT
>  WHERE
>    EXISTS
>      (SELECT B.AO FROM P3AT AS B WHERE B.AO=P3AT.AO AND ....)

>  There're indices on AO,AT,AV. Size of table about 23000 rows.

>  He uses indices only for the statement within EXISTS, which seems
> to be pretty fast but for the outer SELECT statement he uses a
> sequential scan ... which brings the the statement down from 23 ms to
> 2000ms.

>  Actually I don not understand it. The "B.AO=P3AT.AO" should create
> internally a join (?) and therefore he could use the index on AO in
> the outer select to create the result - but the seq scan seems to
> be wrong.

You are right, this would be better done as a join, but the system is
not currently smart enough to rewrite a sub-SELECT into a join.  You
have to do it yourself :-(.

I think preserving the semantics of this exactly would require outer
joins, which we don't yet have, but you could get close with DISTINCT:

SELECT DISTINCT A.AO,A.AT,A.AV FROM P3AT A, P3AT B
WHERE A.AO = B.AO AND ...;

Both of these issues are on the TODO list, and probably will get
addressed in a release or three...
        regards, tom lane


pgsql-sql by date:

Previous
From: Marten Feldtmann
Date:
Subject: Re: [SQL] index usage ... strange !?
Next
From: Tom Lane
Date:
Subject: Re: [SQL] char(19) to varchar(32)