Re: pushing order by + limit to union subqueries

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Paolo Losi <paolo(dot)losi(at)gmail(dot)com>
Cc: pgsql-performance(at)postgresql(dot)org
Subject: Re: pushing order by + limit to union subqueries
Date: 2015-02-28 16:24:01
Message-ID: 28519.1425140641@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-performance

Paolo Losi <paolo(dot)losi(at)gmail(dot)com> writes:
> I've noticed that order by / limit are not distributed to union subqueries
> by the planner:

> Example:

> q1: (select * from t1) union all (select * from t2) order by x limit 10;
> q2: (select * from t1 order by x limit 10) union all (select * from t2
> order by x limit 10)
> order by x limit 10;

> both queries should be equivalent, but the planner provides hugely different
> plans. I was expecting that the planner could rewrite the first to the
> second.
> Am I overlooking something? If this is the case, can anyone explain why this
> optimization is not performed?

There would be cases where that would be a win, and there would be cases
where it wouldn't be, so I'd not be in favor of making the transformation
blindly. Unfortunately, given the current state of the planner that's
all we could do really, because the subqueries are planned at arm's
length and then we just mechanically combine them. Doing it "right" would
entail fully planning each subquery twice, which would be very expensive.

I have a longstanding desire to rewrite the upper levels of the planner to
use path generation and comparison, which should make it more practical
for the planner to compare alternative implementations of UNION and other
top-level constructs. But I've been saying I would do that for several
years now, so don't hold your breath :-(

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2015-02-28 17:06:02 Re: add modulo (%) operator to pgbench
Previous Message Tom Lane 2015-02-28 16:11:05 Re: star schema and the optimizer

Browse pgsql-performance by date

  From Date Subject
Next Message Sergey Shchukin 2015-03-03 13:54:49 Re: [GENERAL] Re: [pgadmin-support] Issue with a hanging apply process on the replica db after vacuum works on primary
Previous Message Paolo Losi 2015-02-28 09:08:30 pushing order by + limit to union subqueries