Re: Using index from sub-query - Mailing list pgsql-general

From Mike Mascari
Subject Re: Using index from sub-query
Date
Msg-id 200008281548.LAA21340@corvette.mascari.com
Whole thread Raw
In response to Using index from sub-query  (pdaly <petedaly@ix.netcom.com>)
List pgsql-general
> From: pdaly <petedaly@ix.netcom.com>
> As has been talked about recently, I have a int8 field, which when
searched for
> as 'value' will use the index, but as value, with the quotes will not.
>
> I subquery to get a list of the values to look up:
>
> SELECT [fields]
>      FROM table1
>      WHERE id in (
>         select distinct id from namelookup where name = '$tname'
>         )
>
> When I do an explain on this, it is doing a table scan, and not using the
index
> table1.  It will only use the index when the value to be matched is in
quotes.
> How can I force it to use the index, or create a new index which would be
used.
>
> This causes a HUGE performance hit.  (30-45 seconds, as opposed to less
than 1
> second.)

Unfortunately, PostgreSQL doesn't use indexes with IN clauses.
Its on the list of things TODO though. At the moment, you have
to write the query using EXISTS instead:

SELECT table1.[fields] FROM table1
WHERE EXISTS
(SELECT namelookup.id FROM namelookup WHERE
 namelookup.id = table1.id AND name = '$tname');

Hope that helps,

Mike Mascari


pgsql-general by date:

Previous
From: "Barnes, Sandy (Sandra)"
Date:
Subject: lo_creat() failing after 22 iterations
Next
From: Anthony Marino
Date:
Subject: java.sql.SQLException: ERROR: