> On 30 May 2018, at 18:19, Daniel Gustafsson <dan...@yesql.se> wrote: > > Currently, we can only reuse Sort nodes between WindowAgg nodes iff the > partitioning and ordering clauses are identical. If a window Sort node > sortorder is a prefix of another window, we could however reuse the Sort node > to hopefully produce a cheaper plan. In src/backend/optimizer/plan/planner.c > there is a comment alluding to this: > > * ... > * > * There is room to be much smarter here, for example detecting whether > * one window's sort keys are a prefix of another's (so that sorting for > * the latter would do for the former), or putting windows first that > * match a sort order available for the underlying query. For the > moment > * we are content with meeting the spec. > */ > > The attached patch takes a stab at implementing the sorting on partitioning/ > ordering prefix, inspired by a similar optimization in the Greenplum planner. > In testing the impact on planning time seems quite minimal, or within the > error > margin.
Attached is a rebased v2 addressing off-list review comments and including a test. Parking this in the commitfest. cheers ./daniel
window_prefix_sort-v2.patch
Description: Binary data