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
|
* 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 *) constFlags[n],
|
||||||
(char *) nIndexKeys,
|
(char *) nIndexKeys,
|
||||||
(char *) indexrelid);
|
(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;
|
npages += PointerIsValid(amopnpages) ? *amopnpages : 0.0;
|
||||||
if ((i = npages) < npages) /* ceil(npages)? */
|
if ((i = npages) < npages) /* ceil(npages)? */
|
||||||
npages += 1.0;
|
npages += 1.0;
|
||||||
|
#endif
|
||||||
|
npages += PointerIsValid(amopnpages) ? *amopnpages : 0.0;
|
||||||
|
|
||||||
amopselect = (float64) fmgr(amop->amopselect,
|
amopselect = (float64) fmgr(amop->amopselect,
|
||||||
(char *) operatorObjectIds[n],
|
(char *) operatorObjectIds[n],
|
||||||
(char *) indrelid,
|
(char *) indrelid,
|
||||||
@ -577,7 +585,13 @@ IndexSelectivity(Oid indexrelid,
|
|||||||
(char *) indexrelid);
|
(char *) indexrelid);
|
||||||
select *= PointerIsValid(amopselect) ? *amopselect : 1.0;
|
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;
|
*idxSelec = select;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user