Skip to content

Commit deee4e1

Browse files
committed
Make eqsel produce better results for boolean columns,
and make scalarltsel a little more forgiving at the boundaries of the known range of a column value.
1 parent 9c80cce commit deee4e1

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/backend/utils/adt/selfuncs.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*
1717
* IDENTIFICATION
18-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.55 2000/02/15 20:49:21 tgl Exp $
18+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.56 2000/02/16 00:59:27 tgl Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -144,10 +144,13 @@ eqsel(Oid opid,
144144
selec = 1.0 - commonfrac - nullfrac;
145145
if (selec > commonfrac)
146146
selec = commonfrac;
147-
/* and in fact it's probably less, so apply a fudge
148-
* factor.
147+
/* and in fact it's probably less, so we should apply
148+
* a fudge factor. The only case where we don't is
149+
* for a boolean column, where indeed we have estimated
150+
* the less-common value's frequency exactly!
149151
*/
150-
selec *= 0.5;
152+
if (typid != BOOLOID)
153+
selec *= 0.5;
151154
}
152155
}
153156
else
@@ -310,20 +313,20 @@ scalarltsel(Oid opid,
310313
/* If we trusted the stats fully, we could return a small or
311314
* large selec depending on which side of the single data point
312315
* the constant is on. But it seems better to assume that the
313-
* stats are out of date and return a default...
316+
* stats are wrong and return a default...
314317
*/
315318
*result = DEFAULT_INEQ_SEL;
316-
}
317-
else if (val <= low || val >= high)
319+
}
320+
else if (val < low || val > high)
318321
{
319322
/* If given value is outside the statistical range, return a
320323
* small or large value; but not 0.0/1.0 since there is a chance
321324
* the stats are out of date.
322325
*/
323326
if (flag & SEL_RIGHT)
324-
*result = (val <= low) ? 0.01 : 0.99;
327+
*result = (val < low) ? 0.001 : 0.999;
325328
else
326-
*result = (val <= low) ? 0.99 : 0.01;
329+
*result = (val < low) ? 0.999 : 0.001;
327330
}
328331
else
329332
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy