Commit fa2629b7 authored by Vadim B. Mikheev's avatar Vadim B. Mikheev

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 ?
parent b30aa6ec
...@@ -8,7 +8,7 @@ ...@@ -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, ...@@ -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, ...@@ -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;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment