]> granicus.if.org Git - postgresql/commitdiff
Tweak indexscan cost estimation: round estimated # of tuples visited up
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 30 Mar 2000 00:53:30 +0000 (00:53 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 30 Mar 2000 00:53:30 +0000 (00:53 +0000)
to next integer.  Previously, if selectivity was small, we could compute
very tiny scan cost on the basis of estimating that only 0.001 tuple
would be fetched, which is silly.  This naturally led to some rather
silly plans...

src/backend/optimizer/path/costsize.c
src/backend/utils/adt/selfuncs.c

index 4270032d278a65c32e760fb2eb7ec7f45eb9349f..37b4dfc42e7a28ae60d777fc53e0a0fdcc6b48e7 100644 (file)
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.54 2000/03/22 22:08:33 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.55 2000/03/30 00:53:29 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -262,11 +262,11 @@ cost_index(Path *path, Query *root,
         * effect.  Would be nice to do better someday.
         */
 
-       tuples_fetched = indexSelectivity * baserel->tuples;
+       tuples_fetched = ceil(indexSelectivity * baserel->tuples);
 
        if (tuples_fetched > 0 && baserel->pages > 0)
-               pages_fetched = baserel->pages *
-                       log(tuples_fetched / baserel->pages + 1.0);
+               pages_fetched = ceil(baserel->pages *
+                                                        log(tuples_fetched / baserel->pages + 1.0));
        else
                pages_fetched = tuples_fetched;
 
@@ -594,7 +594,7 @@ cost_hashjoin(Path *path,
         * conservatively as the inner disbursion times the inner tuple count.
         */
        run_cost += cpu_operator_cost * outer_path->parent->rows *
-               (inner_path->parent->rows * innerdisbursion);
+               ceil(inner_path->parent->rows * innerdisbursion);
 
        /*
         * Estimate the number of tuples that get through the hashing filter
index af7a449f6975af8b1839a4433d76e919c0ef8901..0cd408ed78fc77e4321d125d40e1dd187b825957 100644 (file)
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.61 2000/03/23 00:55:42 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.62 2000/03/30 00:53:30 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "postgres.h"
 
+#include <math.h>
+
 #include "access/heapam.h"
 #include "catalog/catname.h"
 #include "catalog/pg_operator.h"
@@ -900,10 +902,10 @@ genericcostestimate(Query *root, RelOptInfo *rel,
                                                                                           lfirsti(rel->relids));
 
        /* Estimate the number of index tuples that will be visited */
-       numIndexTuples = *indexSelectivity * index->tuples;
+       numIndexTuples = ceil(*indexSelectivity * index->tuples);
 
        /* Estimate the number of index pages that will be retrieved */
-       numIndexPages = *indexSelectivity * index->pages;
+       numIndexPages = ceil(*indexSelectivity * index->pages);
 
        /*
         * Compute the index access cost.