Make GEQO use dependent on table and index count.
authorBruce Momjian
Tue, 2 Feb 1999 20:30:18 +0000 (20:30 +0000)
committerBruce Momjian
Tue, 2 Feb 1999 20:30:18 +0000 (20:30 +0000)
doc/src/sgml/ref/set.sgml
src/backend/optimizer/path/allpaths.c
src/backend/parser/gram.c
src/man/set.l

index 9627c1f354c58b28df7c622a1dcdbddea4e8d32d..ac3c225267ac367eb44b635c17c576f4c3547dd2 100644 (file)
@@ -406,7 +406,7 @@ SET TIME ZONE { 'timezone' | LOCAL
      
      
        This algorithm is on by default, which used GEQO for
-       statements of six or more tables.
+       statements of six or more tables and indexes.
        (See the chapter on GEQO in the Programmer's Guide
        for more information).
      
@@ -676,6 +676,11 @@ SET TIME ZONE { 'timezone' | LOCAL
      --
      SET DATESTYLE TO 'ISO';
    
+    
+     --Enable GEQO for queries with 4 or more tables and indexes
+     --
+     SET GEQO ON=4;
+   
     
      --Set GEQO to default:
      --
index 8de364a04afcba69fa1834fe2e9c9981a181f110..4e5ab10094df53a485ab0b44982a7c0885c5eceb 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.23 1998/09/01 04:29:27 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.24 1999/02/02 20:30:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -78,7 +78,6 @@ find_paths(Query *root, List *rels)
 
    if (levels_needed <= 1)
    {
-
        /*
         * Unsorted single relation, no more processing is required.
         */
@@ -86,7 +85,6 @@ find_paths(Query *root, List *rels)
    }
    else
    {
-
        /*
         * this means that joins or sorts are required. set selectivities
         * of clauses that have not been set by an index.
@@ -123,7 +121,7 @@ find_rel_paths(Query *root, List *rels)
 
        rel_index_scan_list = find_index_paths(root,
                                               rel,
-                                       find_relation_indices(root, rel),
+                                              find_relation_indices(root, rel),
                                               rel->clauseinfo,
                                               rel->joininfo);
 
@@ -182,18 +180,27 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
     * genetic query optimizer entry point     *
     *              *
     *******************************************/
+   {
+       List       *temp;
+       int         paths_to_consider = 0;
 
-   if ((_use_geqo_) && length(root->base_rel_list) >= _use_geqo_rels_)
-       return lcons(geqo(root), NIL);  /* returns *one* RelOptInfo, so
-                                        * lcons it */
+       foreach(temp, outer_rels)
+       {
+           RelOptInfo *rel = (RelOptInfo *) lfirst(temp);
+           paths_to_consider += length(rel->pathlist);
+       }
 
+       if ((_use_geqo_) && paths_to_consider >= _use_geqo_rels_)
+           /* returns _one_ RelOptInfo, so lcons it */
+           return lcons(geqo(root), NIL);  
+   }
+   
    /*******************************************
     * rest will be deprecated in case of GEQO *
     *******************************************/
 
    while (--levels_needed)
    {
-
        /*
         * Determine all possible pairs of relations to be joined at this
         * level. Determine paths for joining these relation pairs and
@@ -207,7 +214,6 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
        prune_joinrels(new_rels);
 
 #if 0
-
        /*
         * * for each expensive predicate in each path in each distinct
         * rel, * consider doing pullup  -- JMH
@@ -247,7 +253,6 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
 
        if (BushyPlanFlag)
        {
-
            /*
             * prune rels that have been completely incorporated into new
             * join rels
index 8ae45f764feeba9a068e4d90e1b5afd5f2110fcf..2081b741f9e772de40db4fe075ffa772ed94869e 100644 (file)
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.66 1999/02/02 03:44:34 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.67 1999/02/02 20:30:07 momjian Exp $
  *
  * HISTORY
  *   AUTHOR            DATE            MAJOR EVENT
@@ -11450,11 +11450,17 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr)
                least->val.val.str = match_least;
                most->val.type = T_String;
                most->val.val.str = match_most;
+#ifdef USE_LOCALE
+               result = makeA_Expr(AND, NULL,
+                       makeA_Expr(OP, "~", lexpr, rexpr),
+                       makeA_Expr(OP, ">=", lexpr, (Node *)least));
+#else
                result = makeA_Expr(AND, NULL,
                        makeA_Expr(OP, "~", lexpr, rexpr),
                        makeA_Expr(AND, NULL,
                            makeA_Expr(OP, ">=", lexpr, (Node *)least),
                            makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+#endif
            }
        }
    }
@@ -11497,11 +11503,17 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr)
                least->val.val.str = match_least;
                most->val.type = T_String;
                most->val.val.str = match_most;
+#ifdef USE_LOCALE
+               result = makeA_Expr(AND, NULL,
+                       makeA_Expr(OP, "~~", lexpr, rexpr),
+                       makeA_Expr(OP, ">=", lexpr, (Node *)least));
+#else
                result = makeA_Expr(AND, NULL,
                        makeA_Expr(OP, "~~", lexpr, rexpr),
                        makeA_Expr(AND, NULL,
                            makeA_Expr(OP, ">=", lexpr, (Node *)least),
                            makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+#endif
            }
        }
    }
index 3ce8896cd4720589e5dccbc5623054fd587b51b6..d3e5f53bf32f26b1c5293b2915e76b5bbb4029b8 100644 (file)
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.12 1999/02/02 03:45:33 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.13 1999/02/02 20:30:18 momjian Exp $
 .TH SET SQL 05/14/97 PostgreSQL PostgreSQL
 .SH NAME
 set - set run-time parameters for session
@@ -44,7 +44,7 @@ determines the output format for the date and time data types.
 .IR GEQO
 enables or disables the genetic optimizer algorithm. This algorithm is
 .IR on
-by default, which used GEQO for statements of six or more tables.
+by default, which used GEQO for statements of six or more tables and indexes.
 Set the
 .IR Programmer's Guide
 for more information.
@@ -101,7 +101,7 @@ set DateStyle to 'SQL,European'
 .PP
 .nf
 --
---Use GEQO for statements with 4 or more tables
+--Use GEQO for statements with 4 or more tables and indexes
 --
 set GEQO to 'on=4'
 --