0003-When-enable_bitmapscan-false-just-don-t-generate-bit.patch
application/octet-stream
Filename: 0003-When-enable_bitmapscan-false-just-don-t-generate-bit.patch
Type: application/octet-stream
Part: 2
Message:
Re: On disable_cost
Patch
Format: format-patch
Series: patch 0003
Subject: When enable_bitmapscan=false, just don't generate bitmap scan paths.
| File | + | − |
|---|---|---|
| src/backend/optimizer/path/costsize.c | 2 | 2 |
| src/backend/optimizer/path/indxpath.c | 4 | 2 |
From c955ec08fe4feaab48b9ff63be57ecae0ca7f7bd Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
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)