mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Add cost estimation of range @> and <@ operators.
The estimates are based on the existing lower bound histogram, and a new histogram of range lengths. Bump catversion, because the range length histogram now needs to be present in statistic slot kind 6, or you get an error on @> and <@ queries. (A re-ANALYZE would be enough to fix that, though) Alexander Korotkov, with some refactoring by me.
This commit is contained in:
@@ -53,6 +53,6 @@
|
||||
*/
|
||||
|
||||
/* yyyymmddN */
|
||||
#define CATALOG_VERSION_NO 201303101
|
||||
#define CATALOG_VERSION_NO 201303141
|
||||
|
||||
#endif
|
||||
|
@@ -527,6 +527,7 @@ DATA(insert OID = 671 ( "<>" PGNSP PGUID b f f 701 701 16 671 670 float8ne
|
||||
DESCR("not equal");
|
||||
DATA(insert OID = 672 ( "<" PGNSP PGUID b f f 701 701 16 674 675 float8lt scalarltsel scalarltjoinsel ));
|
||||
DESCR("less than");
|
||||
#define Float8LessOperator 672
|
||||
DATA(insert OID = 673 ( "<=" PGNSP PGUID b f f 701 701 16 675 674 float8le scalarltsel scalarltjoinsel ));
|
||||
DESCR("less than or equal");
|
||||
DATA(insert OID = 674 ( ">" PGNSP PGUID b f f 701 701 16 672 673 float8gt scalargtsel scalargtjoinsel ));
|
||||
|
@@ -269,11 +269,15 @@ typedef FormData_pg_statistic *Form_pg_statistic;
|
||||
#define STATISTIC_KIND_DECHIST 5
|
||||
|
||||
/*
|
||||
* An "empty frac" slot describes the fraction of empty ranges in a range-type
|
||||
* column. stavalues is not used and should be NULL. stanumbers contains a
|
||||
* single entry, the fraction of empty ranges (0.0 to 1.0).
|
||||
* A "length histogram" slot describes the distribution of range lengths in
|
||||
* rows of a range-type column. stanumbers contains a single entry, the
|
||||
* fraction of empty ranges. stavalues is a histogram of non-empty lengths, in
|
||||
* a format similar to STATISTIC_KIND_HISTOGRAM: it contains M (>=2) range
|
||||
* values that divide the column data values into M-1 bins of approximately
|
||||
* equal population. The lengths are stores as float8s, as measured by the
|
||||
* range type's subdiff function. Only non-null rows are considered.
|
||||
*/
|
||||
#define STATISTIC_KIND_RANGE_EMPTY_FRAC 6
|
||||
#define STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM 6
|
||||
|
||||
/*
|
||||
* A "bounds histogram" slot is similar to STATISTIC_KIND_HISTOGRAM, but for
|
||||
|
Reference in New Issue
Block a user