mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Faster partition pruning
Add a new module backend/partitioning/partprune.c, implementing a more sophisticated algorithm for partition pruning. The new module uses each partition's "boundinfo" for pruning instead of constraint exclusion, based on an idea proposed by Robert Haas of a "pruning program": a list of steps generated from the query quals which are run iteratively to obtain a list of partitions that must be scanned in order to satisfy those quals. At present, this targets planner-time partition pruning, but there exist further patches to apply partition pruning at execution time as well. This commit also moves some definitions from include/catalog/partition.h to a new file include/partitioning/partbounds.h, in an attempt to rationalize partitioning related code. Authors: Amit Langote, David Rowley, Dilip Kumar Reviewers: Robert Haas, Kyotaro Horiguchi, Ashutosh Bapat, Jesper Pedersen. Discussion: https://postgr.es/m/098b9c71-1915-1a2a-8d52-1a7a50ce79e8@lab.ntt.co.jp
This commit is contained in:
@ -154,9 +154,11 @@ build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent)
|
||||
rel->part_scheme = NULL;
|
||||
rel->nparts = 0;
|
||||
rel->boundinfo = NULL;
|
||||
rel->partition_qual = NIL;
|
||||
rel->part_rels = NULL;
|
||||
rel->partexprs = NULL;
|
||||
rel->nullable_partexprs = NULL;
|
||||
rel->partitioned_child_rels = NIL;
|
||||
|
||||
/*
|
||||
* Pass top parent's relids down the inheritance hierarchy. If the parent
|
||||
@ -567,9 +569,11 @@ build_join_rel(PlannerInfo *root,
|
||||
joinrel->part_scheme = NULL;
|
||||
joinrel->nparts = 0;
|
||||
joinrel->boundinfo = NULL;
|
||||
joinrel->partition_qual = NIL;
|
||||
joinrel->part_rels = NULL;
|
||||
joinrel->partexprs = NULL;
|
||||
joinrel->nullable_partexprs = NULL;
|
||||
joinrel->partitioned_child_rels = NIL;
|
||||
|
||||
/* Compute information relevant to the foreign relations. */
|
||||
set_foreign_rel_properties(joinrel, outer_rel, inner_rel);
|
||||
@ -734,9 +738,13 @@ build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel,
|
||||
joinrel->has_eclass_joins = false;
|
||||
joinrel->top_parent_relids = NULL;
|
||||
joinrel->part_scheme = NULL;
|
||||
joinrel->nparts = 0;
|
||||
joinrel->boundinfo = NULL;
|
||||
joinrel->partition_qual = NIL;
|
||||
joinrel->part_rels = NULL;
|
||||
joinrel->partexprs = NULL;
|
||||
joinrel->nullable_partexprs = NULL;
|
||||
joinrel->partitioned_child_rels = NIL;
|
||||
|
||||
joinrel->top_parent_relids = bms_union(outer_rel->top_parent_relids,
|
||||
inner_rel->top_parent_relids);
|
||||
|
Reference in New Issue
Block a user