mirror of
https://github.com/postgres/postgres.git
synced 2025-11-03 09:13:20 +03:00
Collect and use multi-column dependency stats
Follow on patch in the multi-variate statistics patch series.
CREATE STATISTICS s1 WITH (dependencies) ON (a, b) FROM t;
ANALYZE;
will collect dependency stats on (a, b) and then use the measured
dependency in subsequent query planning.
Commit 7b504eb282 added
CREATE STATISTICS with n-distinct coefficients. These are now
specified using the mutually exclusive option WITH (ndistinct).
Author: Tomas Vondra, David Rowley
Reviewed-by: Kyotaro HORIGUCHI, Álvaro Herrera, Dean Rasheed, Robert Haas
and many other comments and contributions
Discussion: https://postgr.es/m/56f40b20-c464-fad2-ff39-06b668fac47c@2ndquadrant.com
This commit is contained in:
@@ -1633,13 +1633,17 @@ booltestsel(PlannerInfo *root, BoolTestType booltesttype, Node *arg,
|
||||
case IS_NOT_FALSE:
|
||||
selec = (double) clause_selectivity(root, arg,
|
||||
varRelid,
|
||||
jointype, sjinfo);
|
||||
jointype,
|
||||
sjinfo,
|
||||
NULL);
|
||||
break;
|
||||
case IS_FALSE:
|
||||
case IS_NOT_TRUE:
|
||||
selec = 1.0 - (double) clause_selectivity(root, arg,
|
||||
varRelid,
|
||||
jointype, sjinfo);
|
||||
jointype,
|
||||
sjinfo,
|
||||
NULL);
|
||||
break;
|
||||
default:
|
||||
elog(ERROR, "unrecognized booltesttype: %d",
|
||||
@@ -6436,7 +6440,8 @@ genericcostestimate(PlannerInfo *root,
|
||||
indexSelectivity = clauselist_selectivity(root, selectivityQuals,
|
||||
index->rel->relid,
|
||||
JOIN_INNER,
|
||||
NULL);
|
||||
NULL,
|
||||
index->rel);
|
||||
|
||||
/*
|
||||
* If caller didn't give us an estimate, estimate the number of index
|
||||
@@ -6757,7 +6762,8 @@ btcostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
|
||||
btreeSelectivity = clauselist_selectivity(root, selectivityQuals,
|
||||
index->rel->relid,
|
||||
JOIN_INNER,
|
||||
NULL);
|
||||
NULL,
|
||||
index->rel);
|
||||
numIndexTuples = btreeSelectivity * index->rel->tuples;
|
||||
|
||||
/*
|
||||
@@ -7516,7 +7522,8 @@ gincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
|
||||
*indexSelectivity = clauselist_selectivity(root, selectivityQuals,
|
||||
index->rel->relid,
|
||||
JOIN_INNER,
|
||||
NULL);
|
||||
NULL,
|
||||
index->rel);
|
||||
|
||||
/* fetch estimated page cost for tablespace containing index */
|
||||
get_tablespace_page_costs(index->reltablespace,
|
||||
@@ -7748,7 +7755,8 @@ brincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
|
||||
*indexSelectivity =
|
||||
clauselist_selectivity(root, indexQuals,
|
||||
path->indexinfo->rel->relid,
|
||||
JOIN_INNER, NULL);
|
||||
JOIN_INNER, NULL,
|
||||
path->indexinfo->rel);
|
||||
*indexCorrelation = 1;
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user