From a1dcd8f6dd80cfa3e2670d5f1f09fc7eec5d6e53 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 5 Oct 2003 22:44:25 +0000 Subject: [PATCH] Add a little more smarts to estimate_hash_bucketsize(): if there's no statistics, but there is a unique index on the column, we can safely assume it's well-distributed. --- src/backend/optimizer/path/costsize.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 6b0179c853..65eed58c9f 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -49,7 +49,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.114 2003/08/08 21:41:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.115 2003/10/05 22:44:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -64,6 +64,7 @@ #include "optimizer/clauses.h" #include "optimizer/cost.h" #include "optimizer/pathnode.h" +#include "optimizer/plancat.h" #include "parser/parsetree.h" #include "utils/selfuncs.h" #include "utils/lsyscache.h" @@ -1343,6 +1344,13 @@ estimate_hash_bucketsize(Query *root, Var *var, int nbuckets) 0, 0); if (!HeapTupleIsValid(tuple)) { + /* + * If the attribute is known unique because of an index, + * we can treat it as well-distributed. + */ + if (has_unique_index(rel, var->varattno)) + return 1.0 / (double) nbuckets; + /* * Perhaps the Var is a system attribute; if so, it will have no * entry in pg_statistic, but we may be able to guess something