For ordered Append or MergeAppend, it seems that incremental sort is
currently not considered when injecting an explicit sort into subpaths
that are not sufficiently ordered.  For instance:

set enable_seqscan to off;

explain (costs off)
select hundred as x, two as y from tenk1
union all
select thousand as x, tenthous as y from tenk1
order by x, y;
                            QUERY PLAN
-------------------------------------------------------------------
 Merge Append
   Sort Key: tenk1.hundred, tenk1.two
   ->  Sort
         Sort Key: tenk1.hundred, tenk1.two
         ->  Index Scan using tenk1_hundred on tenk1
   ->  Index Only Scan using tenk1_thous_tenthous on tenk1 tenk1_1
(6 rows)

Similar to what we do in 828e94c9d, I think we can also consider using
explicit incremental sort for ordered Append or MergeAppend.  Here is
a patch doing that.  With this patch, the plan above changes to:

                            QUERY PLAN
-------------------------------------------------------------------
 Merge Append
   Sort Key: tenk1.hundred, tenk1.two
   ->  Incremental Sort
         Sort Key: tenk1.hundred, tenk1.two
         Presorted Key: tenk1.hundred
         ->  Index Scan using tenk1_hundred on tenk1
   ->  Index Only Scan using tenk1_thous_tenthous on tenk1 tenk1_1
(7 rows)

This targets v19.

Thanks
Richard

Attachment: v1-0001-Consider-explicit-incremental-sort-for-Append-and.patch
Description: Binary data

Reply via email to