Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7e0ade0

Browse files
committed
Allow Gather Merge in more cases for parallel DISTINCT
Here we adjust the partial path generation for parallel DISTINCT queries to add Sort nodes on top of any unsorted partial distinct paths. This increases the likelihood of the planner pushing a Sort below a Gather Merge which enables the final phase of the parallel distinct to be implemented using a Unique node in more cases. Sorting the partial distinct paths is particularly useful when the DISTINCT query has an ORDER BY and LIMIT clause as this can allow cheaper plans by having the workers Hash Aggregate then Sort before feeding the results into the Gather Merge. The non-parallel portion of the plan then becomes very cheap as it leaves only Unique and Limit to do in the leader process. Author: Richard Guo Reviewed-by: David Rowley Discussion: https://postgr.es/m/CAMbWs48u9VoVOouJsys1qOaC9WVGVmBa+wT1dx8KvxF5GPzezA@mail.gmail.com
1 parent 0b6517a commit 7e0ade0

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

src/backend/optimizer/plan/planner.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -4819,7 +4819,7 @@ create_partial_distinct_paths(PlannerInfo *root, RelOptInfo *input_rel,
48194819

48204820
if (partial_distinct_rel->partial_pathlist != NIL)
48214821
{
4822-
generate_gather_paths(root, partial_distinct_rel, true);
4822+
generate_useful_gather_paths(root, partial_distinct_rel, true);
48234823
set_cheapest(partial_distinct_rel);
48244824

48254825
/*

src/test/regress/expected/select_distinct.out

+4-4
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ SELECT DISTINCT four FROM tenk1;
235235
QUERY PLAN
236236
----------------------------------------------------
237237
Unique
238-
-> Sort
239-
Sort Key: four
240-
-> Gather
241-
Workers Planned: 2
238+
-> Gather Merge
239+
Workers Planned: 2
240+
-> Sort
241+
Sort Key: four
242242
-> HashAggregate
243243
Group Key: four
244244
-> Parallel Seq Scan on tenk1

0 commit comments

Comments
 (0)