I have two tables: A
and P
. I want to get information out of all rows in A
whose id is in a temporary table I created, tmp_ids
. However, there is additional information about A
in the P
table, foo
, and I want to get this info as well. I have the following query:
SELECT A.H_id AS hid,
A.id AS aid,
P.foo, A.pos, A.size
FROM tmp_ids, P, A
WHERE tmp_ids.id = A.H_id
AND P.id = A.P_id
I noticed it going slowly, and when I asked Postgres to explain, I noticed that it combines tmp_ids
with an index on A
I created for H_id
with a nested loop. However, it hashes all of P
before doing a Hash join with the result of the first merge. P
is quite large and I think this is what's taking all the time. Why would it create a hash there? P.id
is P
's primary key, and A.P_id
has an index of its own.
UPDATE: All the datatypes are INTEGER, except A.size
which is a DOUBLE PRECISION and P.foo
which is VARCHAR. I'm using PostgreSQL version 8.4.
Here is the explain: http://explain.depesz.com/s/WBo .