pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Ilia Kantor <ilia@obnovlenie.ru>
To: pgsql-performance@postgresql.org
Subject: Planner improvement suggestion
Date: Mon, 29 Aug 2005 00:59:33 +0400
Message-ID: <auto-000558493797@umail.ru> (raw)

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.

 

 

 

 

 

 

view thread (2+ messages)  latest in thread

Message-ID: <auto-000558493797@umail.ru>
Permalink:  ../auto-000558493797@umail.ru/
Also on:    postgresql.org/message-id/auto-000558493797@umail.ru

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: ilia@obnovlenie.ru
  Subject: Re: Planner improvement suggestion
  In-Reply-To: <auto-000558493797@umail.ru>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox