mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Support index-only scans using the visibility map to avoid heap fetches.
When a btree index contains all columns required by the query, and the visibility map shows that all tuples on a target heap page are visible-to-all, we don't need to fetch that heap page. This patch depends on the previous patches that made the visibility map reliable. There's a fair amount left to do here, notably trying to figure out a less chintzy way of estimating the cost of an index-only scan, but the core functionality seems ready to commit. Robert Haas and Ibrar Ahmed, with some previous work by Heikki Linnakangas.
This commit is contained in:
@@ -52,6 +52,7 @@ extern PGDLLIMPORT int effective_cache_size;
|
||||
extern Cost disable_cost;
|
||||
extern bool enable_seqscan;
|
||||
extern bool enable_indexscan;
|
||||
extern bool enable_indexonlyscan;
|
||||
extern bool enable_bitmapscan;
|
||||
extern bool enable_tidscan;
|
||||
extern bool enable_sort;
|
||||
@@ -67,7 +68,8 @@ extern double index_pages_fetched(double tuples_fetched, BlockNumber pages,
|
||||
double index_pages, PlannerInfo *root);
|
||||
extern void cost_seqscan(Path *path, PlannerInfo *root, RelOptInfo *baserel);
|
||||
extern void cost_index(IndexPath *path, PlannerInfo *root, IndexOptInfo *index,
|
||||
List *indexQuals, List *indexOrderBys, RelOptInfo *outer_rel);
|
||||
List *indexQuals, List *indexOrderBys,
|
||||
bool indexonly, RelOptInfo *outer_rel);
|
||||
extern void cost_bitmap_heap_scan(Path *path, PlannerInfo *root, RelOptInfo *baserel,
|
||||
Path *bitmapqual, RelOptInfo *outer_rel);
|
||||
extern void cost_bitmap_and_node(BitmapAndPath *path, PlannerInfo *root);
|
||||
|
Reference in New Issue
Block a user