Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
61aa8258
Commit
61aa8258
authored
Feb 14, 1999
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimizer rename.
parent
6724a507
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
59 additions
and
74 deletions
+59
-74
doc/src/sgml/ref/set.sgml
doc/src/sgml/ref/set.sgml
+2
-2
src/backend/optimizer/geqo/geqo_eval.c
src/backend/optimizer/geqo/geqo_eval.c
+2
-2
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/allpaths.c
+13
-27
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/path/joinpath.c
+6
-7
src/backend/optimizer/path/joinrels.c
src/backend/optimizer/path/joinrels.c
+9
-4
src/backend/optimizer/path/prune.c
src/backend/optimizer/path/prune.c
+8
-8
src/backend/optimizer/plan/initsplan.c
src/backend/optimizer/plan/initsplan.c
+4
-4
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/plan/planmain.c
+3
-8
src/include/optimizer/paths.h
src/include/optimizer/paths.h
+4
-4
src/include/optimizer/planmain.h
src/include/optimizer/planmain.h
+2
-2
src/include/version.h.in
src/include/version.h.in
+3
-3
src/man/set.l
src/man/set.l
+3
-3
No files found.
doc/src/sgml/ref/set.sgml
View file @
61aa8258
...
...
@@ -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
and indexes
.
statements of six or more tables.
(See the chapter on GEQO in the Programmer's Guide
for more information).
</para>
...
...
@@ -677,7 +677,7 @@ 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
--Enable GEQO for queries with 4 or more tables
--
SET GEQO ON=4;
</programlisting>
...
...
src/backend/optimizer/geqo/geqo_eval.c
View file @
61aa8258
...
...
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: geqo_eval.c,v 1.
29 1999/02/13 23:16:07
momjian Exp $
* $Id: geqo_eval.c,v 1.
30 1999/02/14 04:56:45
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -135,7 +135,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *out
}
/* process new_rel->pathlist */
find_all_join_path
s
(
root
,
new_rels
);
update_rels_pathlist_for_join
s
(
root
,
new_rels
);
/* prune new_rels */
/* MAU: is this necessary? */
...
...
src/backend/optimizer/path/allpaths.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.3
1 1999/02/13 23:16:14
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.3
2 1999/02/14 04:56:46
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -43,7 +43,7 @@ bool _use_geqo_ = false;
int32
_use_geqo_rels_
=
GEQO_RELS
;
static
void
find_rel_paths
(
Query
*
root
,
List
*
rels
);
static
void
find_
base_
rel_paths
(
Query
*
root
,
List
*
rels
);
static
List
*
find_join_paths
(
Query
*
root
,
List
*
outer_rels
,
int
levels_needed
);
#ifdef OPTIMIZER_DEBUG
...
...
@@ -71,10 +71,7 @@ find_paths(Query *root, List *rels)
if
(
levels_needed
<=
0
)
return
NIL
;
/*
* Find the base relation paths.
*/
find_rel_paths
(
root
,
rels
);
find_base_rel_paths
(
root
,
rels
);
if
(
levels_needed
<=
1
)
{
...
...
@@ -96,7 +93,7 @@ find_paths(Query *root, List *rels)
}
/*
* find_rel_paths
* find_
base_
rel_paths
* Finds all paths available for scanning each relation entry in
* 'rels'. Sequential scan and any available indices are considered
* if possible(indices are not considered for lower nesting levels).
...
...
@@ -105,7 +102,7 @@ find_paths(Query *root, List *rels)
* MODIFIES: rels
*/
static
void
find_rel_paths
(
Query
*
root
,
List
*
rels
)
find_
base_
rel_paths
(
Query
*
root
,
List
*
rels
)
{
List
*
temp
;
...
...
@@ -154,7 +151,7 @@ find_rel_paths(Query *root, List *rels)
* finding ways to join relations(both original and derived) together.
*
* 'outer_rels' is the current list of relations for which join paths
* are to be found, i.e., he current list of relations that
* are to be found, i.e.,
t
he current list of relations that
* have already been derived.
* 'levels_needed' is the number of iterations needed
*
...
...
@@ -172,20 +169,8 @@ 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
;
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
);
}
if
((
_use_geqo_
)
&&
length
(
root
->
base_relation_list_
)
>=
_use_geqo_rels_
)
return
lcons
(
geqo
(
root
),
NIL
);
/* returns *one* Rel, so lcons it */
/*******************************************
* rest will be deprecated in case of GEQO *
...
...
@@ -199,11 +184,11 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
* modify 'new_rels' accordingly, then eliminate redundant join
* relations.
*/
new_rels
=
find_join_rel
s
(
root
,
outer_rels
);
new_rels
=
make_new_rels_by_join
s
(
root
,
outer_rels
);
find_all_join_path
s
(
root
,
new_rels
);
update_rels_pathlist_for_join
s
(
root
,
new_rels
);
prune_joinrel
s
(
new_rels
);
merge_rels_with_same_relid
s
(
new_rels
);
#if 0
/*
...
...
@@ -232,11 +217,11 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
foreach
(
x
,
new_rels
)
{
rel
=
(
RelOptInfo
*
)
lfirst
(
x
);
if
(
rel
->
size
<=
0
)
rel
->
size
=
compute_rel_size
(
rel
);
rel
->
width
=
compute_rel_width
(
rel
);
/* #define OPTIMIZER_DEBUG */
#ifdef OPTIMIZER_DEBUG
printf
(
"levels left: %d
\n
"
,
levels_needed
);
debug_print_rel
(
root
,
rel
);
...
...
@@ -259,6 +244,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
}
else
root
->
join_rel_list
=
new_rels
;
if
(
!
BushyPlanFlag
)
outer_rels
=
new_rels
;
}
...
...
src/backend/optimizer/path/joinpath.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.2
3 1999/02/13 23:16:18
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.2
4 1999/02/14 04:56:46
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -42,7 +42,7 @@ static List *hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, Rel
List
*
hashinfo_list
);
/*
*
find_all_join_path
s
*
update_rels_pathlist_for_join
s
* Creates all possible ways to process joins for each of the join
* relations in the list 'joinrels.' Each unique path will be included
* in the join relation's 'pathlist' field.
...
...
@@ -62,16 +62,17 @@ static List *hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, Rel
* It does a destructive modification.
*/
void
find_all_join_path
s
(
Query
*
root
,
List
*
joinrels
)
update_rels_pathlist_for_join
s
(
Query
*
root
,
List
*
joinrels
)
{
List
*
mergeinfo_list
=
NIL
;
List
*
hashinfo_list
=
NIL
;
List
*
temp_list
=
NIL
;
List
*
path
=
NIL
;
List
*
j
;
while
(
joinrels
!=
NIL
)
foreach
(
j
,
joinrels
)
{
RelOptInfo
*
joinrel
=
(
RelOptInfo
*
)
lfirst
(
j
oinrels
);
RelOptInfo
*
joinrel
=
(
RelOptInfo
*
)
lfirst
(
j
);
List
*
innerrelids
;
List
*
outerrelids
;
RelOptInfo
*
innerrel
;
...
...
@@ -174,8 +175,6 @@ find_all_join_paths(Query *root, List *joinrels)
* since the base level
*/
}
joinrels
=
lnext
(
joinrels
);
}
}
...
...
src/backend/optimizer/path/joinrels.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.2
0 1999/02/13 23:16:18
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.2
1 1999/02/14 04:56:47
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -44,7 +44,7 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptI
JoinInfo
*
jinfo
);
/*
*
find_join_rel
s
*
make_new_rels_by_join
s
* Find all possible joins for each of the outer join relations in
* 'outer_rels'. A rel node is created for each possible join relation,
* and the resulting list of nodes is returned. If at all possible, only
...
...
@@ -57,7 +57,7 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptI
* Returns a list of rel nodes corresponding to the new join relations.
*/
List
*
find_join_rel
s
(
Query
*
root
,
List
*
outer_rels
)
make_new_rels_by_join
s
(
Query
*
root
,
List
*
outer_rels
)
{
List
*
joins
=
NIL
;
List
*
join_list
=
NIL
;
...
...
@@ -69,6 +69,10 @@ find_join_rels(Query *root, List *outer_rels)
if
(
!
(
joins
=
find_clause_joins
(
root
,
outer_rel
,
outer_rel
->
joininfo
)))
{
/*
* Oops, we have a relation that is not joined to any other
* relation. Cartesian product time.
*/
if
(
BushyPlanFlag
)
joins
=
find_clauseless_joins
(
outer_rel
,
outer_rels
);
else
...
...
@@ -124,7 +128,8 @@ find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list)
{
if
(
rel
!=
NULL
)
join_list
=
lappend
(
join_list
,
rel
);
rel
=
init_join_rel
(
get_base_rel
(
root
,
lfirsti
(
other_rels
)),
rel
=
init_join_rel
(
get_base_rel
(
root
,
lfirsti
(
other_rels
)),
outer_rel
,
joininfo
);
}
...
...
src/backend/optimizer/path/prune.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.3
1 1999/02/13 23:16:23
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.3
2 1999/02/14 04:56:47
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -24,10 +24,10 @@
#include "utils/elog.h"
static
List
*
prune_joinrel
(
RelOptInfo
*
rel
,
List
*
other_rels
);
static
List
*
merge_rel_with_same_relids
(
RelOptInfo
*
rel
,
List
*
other_rels
);
/*
*
prune_joinrel
s
*
merge_rels_with_same_relid
s
* Removes any redundant relation entries from a list of rel nodes
* 'rel_list'. Obviously, the first relation can't be a duplicate.
*
...
...
@@ -35,7 +35,7 @@ static List *prune_joinrel(RelOptInfo *rel, List *other_rels);
*
*/
void
prune_joinrel
s
(
List
*
rel_list
)
merge_rels_with_same_relid
s
(
List
*
rel_list
)
{
List
*
i
;
...
...
@@ -44,11 +44,11 @@ prune_joinrels(List *rel_list)
* deleted
*/
foreach
(
i
,
rel_list
)
lnext
(
i
)
=
prune_joinrel
((
RelOptInfo
*
)
lfirst
(
i
),
lnext
(
i
));
lnext
(
i
)
=
merge_rel_with_same_relids
((
RelOptInfo
*
)
lfirst
(
i
),
lnext
(
i
));
}
/*
*
prune_joinrel
*
merge_rel_with_same_relids
* Prunes those relations from 'other_rels' that are redundant with
* 'rel'. A relation is redundant if it is built up of the same
* relations as 'rel'. Paths for the redundant relation are merged into
...
...
@@ -59,7 +59,7 @@ prune_joinrels(List *rel_list)
*
*/
static
List
*
prune_joinrel
(
RelOptInfo
*
rel
,
List
*
other_rels
)
merge_rel_with_same_relids
(
RelOptInfo
*
rel
,
List
*
other_rels
)
{
List
*
i
=
NIL
;
List
*
result
=
NIL
;
...
...
@@ -126,7 +126,7 @@ merge_joinrels(List *rel_list1, List *rel_list2)
{
RelOptInfo
*
rel
=
(
RelOptInfo
*
)
lfirst
(
xrel
);
rel_list2
=
prune_joinrel
(
rel
,
rel_list2
);
rel_list2
=
merge_rel_with_same_relids
(
rel
,
rel_list2
);
}
return
append
(
rel_list1
,
rel_list2
);
}
...
...
src/backend/optimizer/plan/initsplan.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.2
3 1999/02/13 23:16:29
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.2
4 1999/02/14 04:56:50
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -303,16 +303,16 @@ add_vars_to_targetlist(Query *root, List *vars, List *join_relids)
*****************************************************************************/
/*
*
init_join_info
*
set_joininfo_mergeable_hashable
* Set the MergeJoinable or HashJoinable field for every joininfo node
* (within a rel node) and the
MergeJoinOrder or HashJoinO
p field for
* (within a rel node) and the
mergejoinorder or hashjoino
p field for
* each restrictinfo node(within a joininfo node) for all relations in a
* query.
*
* Returns nothing.
*/
void
init_join_info
(
List
*
rel_list
)
set_joininfo_mergeable_hashable
(
List
*
rel_list
)
{
List
*
x
,
*
y
,
...
...
src/backend/optimizer/plan/planmain.c
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.3
1 1999/02/13 23:16:3
0 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.3
2 1999/02/14 04:56:5
0 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -157,7 +157,7 @@ query_planner(Query *root,
else
return
(
Plan
*
)
scan
;
}
break
;
break
;
default:
return
(
Plan
*
)
NULL
;
}
...
...
@@ -257,12 +257,7 @@ subplanner(Query *root,
add_restrict_and_join_to_rels
(
root
,
qual
);
add_missing_vars_to_tlist
(
root
,
flat_tlist
);
/*
* Find all possible scan and join paths. Mark all the clauses and
* relations that can be processed using special join methods, then do
* the exhaustive path search.
*/
init_join_info
(
root
->
base_rel_list
);
set_joininfo_mergeable_hashable
(
root
->
base_rel_list
);
final_rel_list
=
find_paths
(
root
,
root
->
base_rel_list
);
...
...
src/include/optimizer/paths.h
View file @
61aa8258
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: paths.h,v 1.1
5 1999/02/13 23:21:50
momjian Exp $
* $Id: paths.h,v 1.1
6 1999/02/14 04:56:55
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -35,7 +35,7 @@ extern List *find_index_paths(Query *root, RelOptInfo *rel, List *indices,
* joinpath.h
* routines to create join paths
*/
extern
void
find_all_join_path
s
(
Query
*
root
,
List
*
joinrels
);
extern
void
update_rels_pathlist_for_join
s
(
Query
*
root
,
List
*
joinrels
);
/*
...
...
@@ -77,14 +77,14 @@ extern MergeInfo *match_order_mergeinfo(PathOrder *ordering,
* joinrels.h
* routines to determine which relations to join
*/
extern
List
*
find_join_rel
s
(
Query
*
root
,
List
*
outer_rels
);
extern
List
*
make_new_rels_by_join
s
(
Query
*
root
,
List
*
outer_rels
);
extern
void
add_new_joininfos
(
Query
*
root
,
List
*
joinrels
,
List
*
outerrels
);
extern
List
*
final_join_rels
(
List
*
join_rel_list
);
/*
* prototypes for path/prune.c
*/
extern
void
prune_joinrel
s
(
List
*
rel_list
);
extern
void
merge_rels_with_same_relid
s
(
List
*
rel_list
);
extern
void
rels_set_cheapest
(
List
*
rel_list
);
extern
List
*
merge_joinrels
(
List
*
rel_list1
,
List
*
rel_list2
);
extern
List
*
prune_oldrels
(
List
*
old_rels
);
...
...
src/include/optimizer/planmain.h
View file @
61aa8258
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: planmain.h,v 1.2
1 1999/02/13 23:21:50
momjian Exp $
* $Id: planmain.h,v 1.2
2 1999/02/14 04:56:58
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -43,7 +43,7 @@ extern Unique *make_unique(List *tlist, Plan *lefttree, char *uniqueAttr);
*/
extern
void
make_var_only_tlist
(
Query
*
root
,
List
*
tlist
);
extern
void
add_restrict_and_join_to_rels
(
Query
*
root
,
List
*
clauses
);
extern
void
init_join_info
(
List
*
rel_list
);
extern
void
set_joininfo_mergeable_hashable
(
List
*
rel_list
);
extern
void
add_missing_vars_to_tlist
(
Query
*
root
,
List
*
tlist
);
/*
...
...
src/include/version.h.in
View file @
61aa8258
/*-------------------------------------------------------------------------
/*-------------------------------------------------------------------------
*
* version.h.in
--
* version.h.in
* this file contains the interface to version.c.
* Also some parameters.
*
* $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.
4 1998/12/25 02:20:11
momjian Exp $
* $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.
5 1999/02/14 04:56:54
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
src/man/set.l
View file @
61aa8258
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.1
3 1999/02/02 20:30:18
momjian Exp $
.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.1
4 1999/02/14 04:57:02
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
and indexes
.
by default, which used GEQO for statements of six or more tables.
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
and indexes
--Use GEQO for statements with 4 or more tables
--
set GEQO to 'on=4'
--
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment