Planner improvement suggestion

From: "Ilia Kantor" <ilia(at)obnovlenie(dot)ru>
To: <pgsql-performance(at)postgresql(dot)org>
Subject: Planner improvement suggestion
Date: 2005-08-28 20:59:33
Message-ID: auto-000558493797@umail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

I have a query:

SELECT oh.id
FROM objects_hier oh
where
oh.id < 2000 (!)
and
oh.id in (
SELECT id as id FROM objects_access oa
WHERE
oa.master IN (1,2,10001)
AND
oa.id < 2000 (!)

)

The sense of the query is simple: I choose ids from objects_hier where
access has necessary masters.

The problem is: I have duplicate conditions for id here. They are marked
with '!'.

I just can't remove any of them, because planner needs to estimate both
outer and inner selects to calculate the order

Of nested loop or choose a join. If I remove one of duplicate conditions -
planner can't estimate well.

It's obvious that condition on oh.id can be put inside or outside "oh.id in
( .. )" statement with same result.

So I just suggest that the planner should take this into account and
"propagate" the condition outside or inside for planning if needed.

P.S

Is there a way to fix this particular query? Usually oh.id condition is not
like <2000, but an inner join.

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Tom Lane 2005-08-28 21:24:57 Re: intarray is broken ? (8.1b1)
Previous Message Ilia Kantor 2005-08-28 20:48:40 Bitmap scan when it is not needed