Re: Avoid extra Sort nodes between WindowAggs when sorting can be reused

Alexander Kuzmenkov <a.kuzmenkov@postgrespro.ru>

From: Alexander Kuzmenkov <a.kuzmenkov@postgrespro.ru>
To: Daniel Gustafsson <daniel@yesql.se>, Masahiko Sawada <sawada.mshk@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-07-27T19:12:02Z
Lists: pgsql-hackers

Attachments

Daniel,

Thanks for the update.


On 07/25/2018 01:37 AM, Daniel Gustafsson wrote:
>
>> Hmm, this is missing the eqop fields of SortGroupClause. I haven't
>> tested yet but does the similar degradation happen if two
>> SortGroupCaluses have different eqop and the same other values?
> I wasn’t able to construct a case showing this, but I also think you’re right.
> Do you have an idea of a query that can trigger a regression?  The attached
> patch adds a stab at this, but I’m not sure if it’s the right approach.

To trigger that, in your test example you could order by empno::int8 for 
one window, and by empno::int2 for another. But don't I think you have 
to compare eqop here, because if eqop differs, sortop will differ too. I 
removed the comparison from the patch. I also clarified (I hope) the 
comments, and did the optimization I mentioned earlier: using array 
instead of list for active clauses. Please see the attached v6. 
Otherwise I think the patch is good.

-- 
Alexander Kuzmenkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

Commits

  1. Order active window clauses for greater reuse of Sort nodes.