From 547bb4a7f2bdccad9253a99211ce84b3f9de485a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 9 Nov 2004 00:34:46 +0000 Subject: Use a hopefully-more-reliable method of detecting default selectivity estimates when combining the estimates for a range query. As pointed out by Miquel van Smoorenburg, the existing check for an impossible combined result would quite possibly fail to detect one default and one non-default input. It seems better to use the default range query estimate in such cases. To do so, add a check for an estimate of exactly DEFAULT_INEQ_SEL. This is a bit ugly because it introduces additional coupling between clauselist_selectivity and scalarltsel/scalargtsel, but it's not like there wasn't plenty already... --- src/backend/utils/adt/selfuncs.c | 41 +--------------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) (limited to 'src/backend/utils') diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 24759bf5c09..a3f782895b9 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.166 2004/09/18 19:39:50 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.167 2004/11/09 00:34:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -111,45 +111,6 @@ #include "utils/syscache.h" -/* - * Note: the default selectivity estimates are not chosen entirely at random. - * We want them to be small enough to ensure that indexscans will be used if - * available, for typical table densities of ~100 tuples/page. Thus, for - * example, 0.01 is not quite small enough, since that makes it appear that - * nearly all pages will be hit anyway. Also, since we sometimes estimate - * eqsel as 1/num_distinct, we probably want DEFAULT_NUM_DISTINCT to equal - * 1/DEFAULT_EQ_SEL. - */ - -/* default selectivity estimate for equalities such as "A = b" */ -#define DEFAULT_EQ_SEL 0.005 - -/* default selectivity estimate for inequalities such as "A < b" */ -#define DEFAULT_INEQ_SEL (1.0 / 3.0) - -/* default selectivity estimate for pattern-match operators such as LIKE */ -#define DEFAULT_MATCH_SEL 0.005 - -/* default number of distinct values in a table */ -#define DEFAULT_NUM_DISTINCT 200 - -/* default selectivity estimate for boolean and null test nodes */ -#define DEFAULT_UNK_SEL 0.005 -#define DEFAULT_NOT_UNK_SEL (1.0 - DEFAULT_UNK_SEL) - -/* - * Clamp a computed probability estimate (which may suffer from roundoff or - * estimation errors) to valid range. Argument must be a float variable. - */ -#define CLAMP_PROBABILITY(p) \ - do { \ - if (p < 0.0) \ - p = 0.0; \ - else if (p > 1.0) \ - p = 1.0; \ - } while (0) - - /* Return data from examine_variable and friends */ typedef struct { -- cgit v1.2.3