Fix (hack) IndexSelectivity():

use sum(npages)/((nkeys == 1) ? 1 : nkeys + 1) as expected index page
estimation for multi-key quals - instead of sum(npages).
In old code npages for x > 10 and x < 20 is twice as for x > 10 - cool ?
This commit is contained in:
Vadim B. Mikheev 1997-04-09 01:52:04 +00:00
parent b30aa6ecb8
commit fa2629b7ea
1 changed files with 16 additions and 2 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.4 1997/03/12 21:06:14 scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.5 1997/04/09 01:52:04 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@ -564,9 +564,17 @@ IndexSelectivity(Oid indexrelid,
(char *) constFlags[n],
(char *) nIndexKeys,
(char *) indexrelid);
#if 0
/*
* So cool guys! Npages for x > 10 and x < 20 is twice as
* npages for x > 10! - vadim 04/09/97
*/
npages += PointerIsValid(amopnpages) ? *amopnpages : 0.0;
if ((i = npages) < npages) /* ceil(npages)? */
npages += 1.0;
#endif
npages += PointerIsValid(amopnpages) ? *amopnpages : 0.0;
amopselect = (float64) fmgr(amop->amopselect,
(char *) operatorObjectIds[n],
(char *) indrelid,
@ -577,7 +585,13 @@ IndexSelectivity(Oid indexrelid,
(char *) indexrelid);
select *= PointerIsValid(amopselect) ? *amopselect : 1.0;
}
*idxPages = npages;
/*
* Estimation of npages below is hack of course, but it's
* better than it was before. - vadim 04/09/97
*/
if ( nIndexKeys > 1 )
npages = npages / (1.0 + nIndexKeys);
*idxPages = ceil ((double)(npages/nIndexKeys));
*idxSelec = select;
}