Don't zero tuple_fraction when planning UNIONs with ORDER BYs

Since 66c0185a3, the planner is able to use Merge Append -> Unique to
implement UNION queries and each subquery is prompted to produce Paths
correctly sorted by the UNION's targetlist.

Here we remove some now redundant code which was zeroing the
tuple_fraction at the parent level.  This will allow the planner to
consider cheap startup paths when planning the UNION's subqueries.

EXCEPT and INTERSECT set operations still have the tuple_fraction zeroed
in generate_nonunion_paths().  These operations currently always read
all of their subqueries' tuples.

Reported-by: Tom Lane
Discussion: https://postgr.es/m/3703023.1711654574@sss.pgh.pa.us
This commit is contained in:
David Rowley 2024-04-03 11:40:33 +13:00
parent 06c418e163
commit 3b1a7eb289

View File

@ -1338,17 +1338,6 @@ grouping_planner(PlannerInfo *root, double tuple_fraction,
if (parse->setOperations) if (parse->setOperations)
{ {
/*
* If there's a top-level ORDER BY, assume we have to fetch all the
* tuples. This might be too simplistic given all the hackery below
* to possibly avoid the sort; but the odds of accurate estimates here
* are pretty low anyway. XXX try to get rid of this in favor of
* letting plan_set_operations generate both fast-start and
* cheapest-total paths.
*/
if (parse->sortClause)
root->tuple_fraction = 0.0;
/* /*
* Construct Paths for set operations. The results will not need any * Construct Paths for set operations. The results will not need any
* work except perhaps a top-level sort and/or LIMIT. Note that any * work except perhaps a top-level sort and/or LIMIT. Note that any