From: | David Rowley <dgrowleyml(at)gmail(dot)com> |
---|---|
To: | Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, Zhihong Yu <zyu(at)yugabyte(dot)com>, PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Window Function "Run Conditions" |
Date: | 2022-04-05 11:49:15 |
Message-ID: | CAApHDvrU132PxjuLakFrQhjR_b40LHAqhCzk-q2iGOST+-6dCw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, 5 Apr 2022 at 19:38, Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com> wrote:
> 1. We can do more on PASSTHROUGH, we just bypass the window function
> currently, but IIUC we can ignore all of the following tuples in current partition
> once we go into this mode. patch 0001 shows what I mean.
Yeah, there is more performance to be had than even what you've done
there. There's no reason really for spool_tuples() to do
tuplestore_puttupleslot() when we're not in run mode.
The attached should give slightly more performance. I'm unsure if
there's more that can be done for window aggregates, i.e.
eval_windowaggregates()
I'll consider the idea about doing all the filtering in
nodeWindowAgg.c. For now I made find_window_run_conditions() keep the
qual so that it's still filtered in the subquery level when there is a
PARTITION BY clause. Probably the best way would be to make
nodeWindowAgg.c just loop with a for(;;) loop. I'll need to give it
more thought. I'll do that in the morning.
David
Attachment | Content-Type | Size |
---|---|---|
windowagg_hacks.patch | text/plain | 1.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Antonin Houska | 2022-04-05 11:59:30 | Re: Logical replication row filtering and TOAST |
Previous Message | Maxim Orlov | 2022-04-05 11:22:22 | Re: Unit tests for SLRU |