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:
parent
b30aa6ecb8
commit
fa2629b7ea
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user