From c955ec08fe4feaab48b9ff63be57ecae0ca7f7bd Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 2 May 2024 11:30:26 -0400 Subject: [PATCH 3/4] When enable_bitmapscan=false, just don't generate bitmap scan paths. Previously, we generated them, and then added disable_cost to the startup cost of each one. Not generating them at all is cheaper. --- src/backend/optimizer/path/costsize.c | 4 ++-- src/backend/optimizer/path/indxpath.c | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 74fc5aab56..f56b6efe34 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -1034,8 +1034,8 @@ cost_bitmap_heap_scan(Path *path, PlannerInfo *root, RelOptInfo *baserel, else path->rows = baserel->rows; - if (!enable_bitmapscan) - startup_cost += disable_cost; + /* shouldn't reach here if enable_bitmapscan = false */ + Assert(enable_bitmapscan); pages_fetched = compute_bitmap_pages(root, baserel, bitmapqual, loop_count, &indexTotalCost, diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 423099d725..0f2f0c268f 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -332,7 +332,7 @@ create_index_paths(PlannerInfo *root, RelOptInfo *rel) * should be sufficient since there's basically only one figure of merit * (total cost) for such a path. */ - if (bitindexpaths != NIL) + if (enable_bitmapscan && bitindexpaths != NIL) { Path *bitmapqual; BitmapHeapPath *bpath; @@ -357,7 +357,7 @@ create_index_paths(PlannerInfo *root, RelOptInfo *rel) * consider_index_join_clauses, but we're working with whole paths not * individual clauses.) */ - if (bitjoinpaths != NIL) + if (enable_bitmapscan && bitjoinpaths != NIL) { List *all_path_outers; @@ -843,6 +843,8 @@ build_index_paths(PlannerInfo *root, RelOptInfo *rel, case ST_BITMAPSCAN: if (!index->amhasgetbitmap) return NIL; + if (!enable_bitmapscan) + return NIL; break; case ST_ANYSCAN: /* either or both are OK */ -- 2.39.3 (Apple Git-145)