From 34ca0905706422c191b3b0afef6e1c5f54399833 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sat, 5 Nov 2016 13:48:11 -0400 Subject: [PATCH] Adjust cost_merge_append() to reflect use of binaryheap_replace_first(). Commit 7a2fe9bd0 improved merge append so that replacement of a tuple takes log(N) operations, not twice log(N). Since cost_merge_append knew about that explicitly, we should adjust it. This probably makes little difference in practice, but the obsolete comment is confusing. Ideally this would have been put in in 9.3 with the underlying behavior change; but I'm not going to back-patch it, since there's some small chance of changing a plan choice that somebody's optimized for. Thomas Munro Discussion: <CAEepm=0WQBSvuYcMOUj4Ga4NXpu2J=ejZcE=e=eiTjTX-6_gDw@mail.gmail.com> --- src/backend/optimizer/path/costsize.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 2a49639f125..e42895dc31c 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -1577,8 +1577,7 @@ cost_sort(Path *path, PlannerInfo *root, * at any given instant holds the next tuple from each stream. If there * are N streams, we need about N*log2(N) tuple comparisons to construct * the heap at startup, and then for each output tuple, about log2(N) - * comparisons to delete the top heap entry and another log2(N) comparisons - * to insert its successor from the same stream. + * comparisons to replace the top entry. * * (The effective value of N will drop once some of the input streams are * exhausted, but it seems unlikely to be worth trying to account for that.) @@ -1619,7 +1618,7 @@ cost_merge_append(Path *path, PlannerInfo *root, startup_cost += comparison_cost * N * logN; /* Per-tuple heap maintenance cost */ - run_cost += tuples * comparison_cost * 2.0 * logN; + run_cost += tuples * comparison_cost * logN; /* * Also charge a small amount (arbitrarily set equal to operator cost) per -- GitLab