aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path/costsize.c
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2023-08-04 10:47:54 +1200
committerDavid Rowley <drowley@postgresql.org>2023-08-04 10:47:54 +1200
commit3fd19a9b23c2906da52f3f3732dbc533477f284d (patch)
tree8c78e2d9a14efbb8a0048424c4387baf345ef662 /src/backend/optimizer/path/costsize.c
parent3900a02c97c7cc0e211578dc733cff0f4a2b2213 (diff)
downloadpostgresql-3fd19a9b23c2906da52f3f3732dbc533477f284d.tar.gz
postgresql-3fd19a9b23c2906da52f3f3732dbc533477f284d.zip
Minor adjustments to WindowAgg startup cost code
This is a follow-on of 3900a02c9 containing some changes which I forgot to commit locally before forming a patch with git format-patch. Discussion: https://postgr.es/m/CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com
Diffstat (limited to 'src/backend/optimizer/path/costsize.c')
-rw-r--r--src/backend/optimizer/path/costsize.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 8b797e3b462..d6ceafd51c5 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -2933,8 +2933,8 @@ get_windowclause_startup_tuples(PlannerInfo *root, WindowClause *wc,
* NULLs are not allowed, but currently, there's no code to
* error out if there's a NULL Const. We'll only discover
* this during execution. For now, just pretend everything is
- * fine and assume that just the current row/range/group will
- * be needed.
+ * fine and assume that just the first row/range/group will be
+ * needed.
*/
end_offset_value = 1.0;
}
@@ -3056,15 +3056,6 @@ cost_windowagg(Path *path, PlannerInfo *root,
total_cost = input_total_cost;
/*
- * Estimate how many tuples we'll need to read from the subnode before we
- * can output the first WindowAgg row.
- */
- startup_tuples = get_windowclause_startup_tuples(root, winclause,
- input_tuples);
-
- elog(DEBUG1, "startup_tuples = %g", startup_tuples); /* XXX not for commit */
-
- /*
* Window functions are assumed to cost their stated execution cost, plus
* the cost of evaluating their input expressions, per tuple. Since they
* may in fact evaluate their inputs at multiple rows during each cycle,
@@ -3124,6 +3115,9 @@ cost_windowagg(Path *path, PlannerInfo *root,
* cost of the subnode, so we only need to do this when the estimated
* startup tuples is above 1.0.
*/
+ startup_tuples = get_windowclause_startup_tuples(root, winclause,
+ input_tuples);
+
if (startup_tuples > 1.0)
path->startup_cost += (total_cost - startup_cost) / input_tuples *
(startup_tuples - 1.0);