]> granicus.if.org Git - postgresql/commitdiff
Make GEQO use dependent on table and index count.
authorBruce Momjian <bruce@momjian.us>
Tue, 2 Feb 1999 20:30:18 +0000 (20:30 +0000)
committerBruce Momjian <bruce@momjian.us>
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 { '<REPLACEABLE CLASS="PARAMETER">timezone</REPLACEABLE>' | LOCAL
          </para>
          <para>
                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).
          </para>
@@ -676,6 +676,11 @@ SET TIME ZONE { '<REPLACEABLE CLASS="PARAMETER">timezone</REPLACEABLE>' | LOCAL
          --
          SET DATESTYLE TO 'ISO';
        </programlisting>
+       <programlisting> 
+         --Enable GEQO for queries with 4 or more tables and indexes
+         --
+         SET GEQO ON=4;
+       </programlisting>
        <programlisting> 
          --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     *
         *        <utesch@aut.tu-freiberg.de>              *
         *******************************************/
+       {
+               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'
 --